2016-11-18 7 views
5

は私がCプライマープラス、第6版、章で復習問題からこれを見た3なぜ0XAAは符号なしのintで、intではないのですか?

質問:

Question Picture

回答付録でA:

Answer Picture

通知d.0XAA、私の答えはint定数、16進形式、しかし、答えはunsigned int

あると

+0

これは言語によって定義されます。誰かがある時点でそれがどうあるべきかを決めました。あなたはタイムマシンを持っていないと、何十年も前にその決定をした人に尋ねることができない限り、なぜ本当にその理由を知ることはできません。 – Art

+0

@Art Cの標準やその他の情報からもっと多くの情報を提供してください。私はそれを感謝します:) –

+0

あなたが必要とする参照がありますhttp://stackoverflow.com/questions/12499592/c-hex-constant-type – HighPredator

答えて

5

その本が間違っている私はなぜだろうか。 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になります。

+3

標準には 'INT_MAX'が少なくとも' + 32767'以上でなければならないので、 '0x0'から' 0x7fff'までの接尾辞のないすべての16進定数は常に 'int'です。 – user694733

+0

これは既知の正誤表の中には載っていないので、私は正誤表を発行者に提出しました。 – Lundin

+0

本当にありがとうございました^ _ ^ –

関連する問題