unsigned で算術演算を実行したいのですが、負の int の絶対値を取得する必要があります。
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 の補数であることがわかっている場合、暗黙のキャストと明示的なビット演算が標準になるのでしょうか? 可能であれば、この仮定を避けたいと思います。
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...
}