は私がCプライマープラス、第6版、章で復習問題からこれを見た3なぜ0XAAは符号なしのintで、intではないのですか?
質問:
回答付録でA:
通知d.0XAA、私の答えはint
定数、16進形式、しかし、答えはunsigned int
あると
は私がCプライマープラス、第6版、章で復習問題からこれを見た3なぜ0XAAは符号なしのintで、intではないのですか?
質問:
回答付録でA:
通知d.0XAA、私の答えはint
定数、16進形式、しかし、答えはunsigned int
あると
その本が間違っている私はなぜだろうか。 C11 6.4.4.1に従って16進数の整数定数のタイプは、このテーブルから決定される:上記の表の上部に適用されるものであるので
Suffix ... Octal or Hexadecimal Constant
None ... int
unsigned int
long int
unsigned long int
long long int
unsigned long long int
u or U ... unsigned int
unsigned long int
unsigned long long int
あなた定数0xAA
には接尾辞を有していません。意味:コンパイラは、値がint
に収まるかどうか最初にチェックします。適合しない場合は、unsigned int
に収まるかどうかを確認します。
Cの既知の実装では、値0xAA
は確かにint
の内部に収まります。質問に対する正解はint
です。
ただし、定数が0xAAu
であった場合、引用した表の下部が適用され、結果はunsigned int
になります。
標準には 'INT_MAX'が少なくとも' + 32767'以上でなければならないので、 '0x0'から' 0x7fff'までの接尾辞のないすべての16進定数は常に 'int'です。 – user694733
これは既知の正誤表の中には載っていないので、私は正誤表を発行者に提出しました。 – Lundin
本当にありがとうございました^ _ ^ –
これは言語によって定義されます。誰かがある時点でそれがどうあるべきかを決めました。あなたはタイムマシンを持っていないと、何十年も前にその決定をした人に尋ねることができない限り、なぜ本当にその理由を知ることはできません。 – Art
@Art Cの標準やその他の情報からもっと多くの情報を提供してください。私はそれを感謝します:) –
あなたが必要とする参照がありますhttp://stackoverflow.com/questions/12499592/c-hex-constant-type – HighPredator