で宣言されたint16_t
タイプは署名されることが<stdint.h>
保証されていますか、それとも単に署名されることになっていますか?署名する必要があると思いますが、驚くべきことに、これについて明示的に言及している確固たる証拠(つまり、仕様への参照)はどこにも見つからないようです。
誰かがこれをどちらかの方法で確認できますか?可能であれば、仕様への具体的な参照を本当にいただければ幸いです。
n1256 7.18.1p1 言います:
最初の u の有無のみが異なる typedef 名が定義されている場合、それらは 6.2.5 で説明されているように、対応する符号付きおよび符号なしの型を示すものとします。これらの対応するタイプの 1 つを提供する実装は、他のタイプも提供する必要があります。
int16_t
とがあるのでuint16_t
、int16_t
は署名されています。
または実際には 7.18.1.1p1:
typedef 名 intN_t は、幅 N 、パディング ビットなし、および 2 の補数表現を持つ符号付き整数型を指定します。したがって、int8_t は、幅がちょうど 8 ビットの符号付き整数型を示します。
これはそれについてより明確です。
編集:厳密に言えば、 int16_t は、存在することが保証されていないという意味で、署名されていることが保証されていません。たとえば、CHAR_BIT==9 の場合、int16_t
型は存在できません。
はい、int16_t は ISO 仕様によって符号付きの 2 の補数であることが保証されています。