Короткая переменная 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
Другие вопросы по тегам