Короткая переменная int в c
Следующая программа
short b =-10;
printf("%x %d",b,sizeof(b));
выходы (по сравнению с 2008 г.)
FFFFFFF6 2
Почему бы и нет
FFF6 2
То же самое с подписанным символом.
2 ответа
Это связано с целочисленным продвижением типов.
Ваши шорты неявно повышены до int. (здесь 32-битный код). Так что в данном случае это продвижение знака.
Следовательно, ваш printf() выводит шестнадцатеричные цифры полного 32-битного целого.
Когда ваше короткое значение отрицательно, расширение знака заполнит верхние 16 бит битами, поэтому вы получите fffffff6, а не fff6.
Заполнитель%x в строке формата интерпретирует соответствующий параметр как unsigned int.
Чтобы напечатать параметр как короткий, добавьте модификатор длины h в заполнитель:
printf("%hx", hex);
Здесь h Указывает, что преобразование будет одним из d i o u x X или n, а следующий указатель является указателем на short int или unsigned short int (а не int).
ссылка на кодовую панель: http://codepad.org/aX2MzY0o
увидеть это: http://en.wikipedia.org/wiki/Printf_format_string
Потому что он повышен до типа данных int. Выражение sizeof(type) * CHAR_BIT
оценивает количество битов, достаточное для того, чтобы содержать требуемые диапазоны.
Также обратите внимание, что short может быть уже, но также может иметь ту же ширину, что и int. Всегда гарантируется, что int равен или больше, чем short int.
CPU short int
8 bit 16 16
16 bit 16 16
32 bit 16 32
64 bit 16 32