我想在无符号中执行一些算术运算,并且需要取负整数的绝对值,例如
do_some_arithmetic_in_unsigned_mode(int some_signed_value)
{
unsigned int magnitude;
int negative;
if(some_signed_value<0) {
magnitude = 0 - some_signed_value;
negative = 1;
} else {
magnitude = some_signed_value;
negative = 0;
}
...snip...
}
但是 INT_MIN 可能有问题,如果在有符号算术中执行,0 - INT_MIN 是 UB。在 C 中执行此操作的标准/稳健/安全/有效的方法是什么?
编辑:
如果我们知道我们在 2-complement 中,那么隐式转换和显式位操作可能是标准的吗?如果可能的话,我想避免这种假设。
do_some_arithmetic_in_unsigned_mode(int some_signed_value)
{
unsigned int magnitude=some_signed_value;
int negative=some_signed_value<0;
if (negative) {
magnitude = (~magnitude) + 1;
}
...snip...
}