は、我々は次のコードがあるとします。ビット単位の操作は移植可能ですか?
int j = -1 & 0xFF;
j
での結果の値は、基礎となる表現に基づいて、次のいずれかになります。
System Value
Two's complement 0xFF
One's complement 0xFE
Sign/Magnitude 0x01
しかし&
、|
、および^
演算子ですCでは常に2の補数の形で定義されます(したがって、j
は常に0xFF
と等しくなります)か、またはそれらはシステムの基礎となる表現に関して定義されていますか?
一般的なアドバイスとして、符号付き整数を使用することは、bit-opsとビットシフトの左側のオペランドでは避けるべきです(右のオペランドは問題を引き起こすほどにはなりません)。 – Olaf