C99 (ISO/IEC 9899:1999)
6.2.6.2/1 整数型
パディング ビットの値は指定されていません。45)符号ビットがゼロである符号付き整数型の有効な (非トラップ) オブジェクト表現は、対応する符号なし型の有効なオブジェクト表現であり、同じ値を表すものとします。
任意の整数型の場合、すべてのビットがゼロであるオブジェクト表現は、その型の値ゼロの表現でなければなりません。
C99 標準では、すべてのビットがゼロである整数型は0
、それぞれの型の値を表すことが保証されています。しかし、これは基になるバイナリ値が期待どおりであることを保証しますか?
例えば:
unsigned x = 42;
通常、マシンはこの 10 進42
数値を 2 進数値としてメモリに格納すると予想され101010
ます。
しかし、一部の風変わりなマシン アーキテクチャで42
は、2 進数値と同じ 10 進数値を格納011011
できますか?
その場合は、右シフト操作を利用する次のコードを検討してください。
unsigned y = x>>1; /* 101010>>1 or 011011>>1 */
y
10 進値21
(10101
バイナリ) または 10 進値13
(バイナリ) を保持しますか01101
?
C99 標準は、ビット演算後の符号なし整数型の 10 進数表現について保証していますか? たとえば、右シフトは、2
すべてのマシン アーキテクチャで整数除算と同等であることが保証されていますか?