Das Buch ist falsch.
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
Ihre Konstante 0xAA
hat kein Suffix so der obere Teil der obigen Tabelle ist, was gilt: Richtet sich nach C11 6.4.4.1, sind die Art von Integer-Konstanten von hexadezimal aus dieser Tabelle bestimmt. Das bedeutet: Der Compiler überprüft zunächst, ob der Wert in eine int
passen kann. Wenn es nicht passt, wird es prüfen, ob es in eine unsigned int
und so weiter passt.
Bei jeder bekannten Implementierung von C passt der Wert 0xAA
sicherlich in eine int
. Die richtige Antwort auf die Frage ist int
.
Hätte aber die Konstante 0xAAu
gewesen, hätte der untere Teil der zitierten Tabelle angewendet werden müssen und das Ergebnis wäre unsigned int
gewesen.
So definiert es die Sprache. Jemand hat irgendwann entschieden, dass es so ist. Sie können nicht wirklich herausfinden warum, außer Sie haben eine Zeitmaschine und können fragen, wer diese Entscheidung vor ein paar Jahrzehnten getroffen hat. – Art
@Art könnten Sie bitte mehr Informationen von C-Standard oder etwas anderes geben? Ich werde schätzen, dass :) –
Hier ist die Referenz, die Sie http://stackoverflow.com/questions/12499592/c-hex-constant-type benötigen – HighPredator