C99 標準のセクション 7.18.1.1パラグラフ1:
typedef 名は、幅N、パディング ビットなし、および 2 の補数表現を
intN_t
持つ符号付き整数型を指定します。
C99 標準によると、正確な幅の符号付き整数型は2 の補数表現を持つ必要があります。これは、たとえば、1 の補数の最小値ではなくint8_t
、 の最小値を持つことを意味します。-128
-127
セクション 6.2.6.2パラグラフ 2 では、実装で符号ビットを符号と大きさ、2 の補数、または1 の補数として解釈するかどうかを決定できます。
符号ビットが 1 の場合、値は次のいずれかの方法で変更されます。
— 符号ビット 0 の対応する値は否定されます (符号と大きさ)。
— 符号ビットの値は -(2 N ) ( 2 の補数) です。
— 符号ビットの値は -(2 N - 1) ( 1 の補数) です。
2 の補数( ) の整数の最小値は、1 の補数( ~ )-128
で表現可能な値の範囲外になる可能性があるため、メソッド間の違いは重要です。-127
127
実装が型を表現を持つものとして定義し、型にはint
C99標準で保証されている表現があるとします。ones' complement
int16_t
two's complement
int16_t foo = -32768;
int bar = foo;
この場合、 が保持する値が で表現できる値の範囲外であるため、 からint16_t
への変換int
によって実装定義の動作が発生しますか?foo
bar