4

で宣言されたint16_tタイプは署名されることが<stdint.h> 保証されていますか、それとも単に署名されることになっていますか?署名する必要があると思いますが、驚くべきことに、これについて明示的に言及している確固たる証拠(つまり、仕様への参照)はどこにも見つからないようです。

誰かがこれをどちらかの方法で確認できますか?可能であれば、仕様への具体的な参照を本当にいただければ幸いです。

4

2 に答える 2

7

n1256 7.18.1p1 言います:

最初の u の有無のみが異なる typedef 名が定義されている場合、それらは 6.2.5 で説明されているように、対応する符号付きおよび符号なしの型を示すものとします。これらの対応するタイプの 1 つを提供する実装は、他のタイプも提供する必要があります。

int16_tとがあるのでuint16_tint16_tは署名されています。

または実際には 7.18.1.1p1:

typedef 名 intN_t は、幅 N 、パディング ビットなし、および 2 の補数表現を持つ符号付き整数型を指定します。したがって、int8_t は、幅がちょうど 8 ビットの符号付き整数型を示します。

これはそれについてより明確です。

編集:厳密に言えば、 int16_t は、存在することが保証されていないという意味で、署名されていることが保証されていませ。たとえば、CHAR_BIT==9 の場合、int16_t型は存在できません。

于 2011-01-09T07:23:42.367 に答える
4

はい、int16_t は ISO 仕様によって符号付きの 2 の補数であることが保証されています。

于 2011-01-09T07:22:19.953 に答える