В качестве обновления доступных типов данных C, посмотрите здесь .
Существует правило, которое касается использования C, некоторые типы данных переводятся в их интегральный тип, например
.
char ch = '2';
int j = ch + 1;
Теперь посмотрите на RHS (правая сторона) выражения и обратите внимание, что ch
будет автоматически продвигаться как int , чтобы получить желаемые результаты на LHS (LHS) выражение. Каким будет значение j
? Код ASCII для '2' равен 50 десятичному или шестнадцатеричному 0x32, добавьте к нему 1, и значение j
будет равно 51 десятичному или шестнадцатеричному 0x33.
Важно понимать это правило, и это объясняет, почему тип данных будет «повышен» до другого типа данных.
Что такое b
? То есть массив, который, как я полагаю, содержит 655532 правильных элементов?
В любом случае, используя спецификатор формата %d
для типа int, значение, во-первых, повышается до int, во-вторых, и, во-вторых, индекс индекса имеет тип int
, следовательно, использование short var
поощряется и поскольку размер данных типа int равен 4 байта, он получил повышение, и, следовательно, вы видите оставшуюся часть значения 0xFFFF 0xFFFC.
Здесь используется приведение , чтобы сообщить компилятору приведение типа данных к другому, что объясняется в связи с ответом Грегори Пакоша выше.
Надеюсь, это поможет,
С наилучшими пожеланиями,
Том.