basic_integer(int32_t i32)
{
allocate(1);
if ( i32 & _mask )
{
sign = -1;
blocks[0] = -i32;
}
else
{
if ( i32 != 0 )
sign = +1;
else
sign = 0;
blocks[0] = i32;
}
}
여기서,
sign 에 0이란 state 가 필요없다면 아래처럼 간단히
inline unsigned int abs( const unsigned int value, unsigned int& sign )
{
const unsigned int sign_mask = (int)value >> 31;
sign = sign_mask | 1;
return value ^ sign_mask - sign_mask;
}
안 간단하다고? 미안.
변태...