Ta książka jest nieprawidłowy. Zgodnie C11 6.4.4.1, typ stałych całkowitych w systemie szesnastkowym są określane na podstawie tej tabeli:
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
stałej 0xAA
ma przyrostek więc górna część powyższej tabeli jest to, co odnosi. Znaczenie: kompilator najpierw sprawdzi, czy wartość może zmieścić się w int
. Jeśli nie pasuje, sprawdzi, czy pasuje do unsigned int
i tak dalej.
Przy każdej znanej implementacji C wartość 0xAA
z pewnością zmieści się wewnątrz int
. Prawidłowa odpowiedź na to pytanie to int
.
Jednakże, gdyby stała była 0xAAu
, dolna część cytowanej tabeli zostałaby zastosowana, a wynikiem byłby unsigned int
.
Tak definiuje język. Ktoś w pewnym momencie zdecydował, że tak powinno być. Naprawdę nie możesz dowiedzieć się dlaczego, chyba że masz maszynę czasu i możesz zapytać, kto podjął tę decyzję kilka dekad temu. – Art
@Art możesz podać więcej informacji ze standardu C lub czegoś innego? Doceniam to :) –
Oto referencja, której potrzebujesz http://stackoverflow.com/questions/12499592/c-hex-constant-type – HighPredator