Вывод на экран значений signed от unsigned - C (СИ)
Формулировка задачи:
Здравствуйте! Помогите разобраться с выводом значений signed и unsigned. Я знаю что это знаковые и беззнаковые. Вот например:
Почему у меня разные выводы printf, а sizeof(unsigned_value) == sizeof(signed_value) == 1.
unsigned char unsigned_value = 0xff; /* Значение в десятичной системе 255 */
char signed_value = 0xff; /* значение в десятичной системе -1 */
printf("%02x\n", unsigned_value); /* 0xff */
printf("%02x\n", signed_value); /* 0xffffffff */Решение задачи: «Вывод на экран значений signed от unsigned»
textual
Листинг программы
printf("%02hhx\n", signed_value);
Объяснение кода листинга программы
- В данном коде происходит вывод на экран значения переменной
signed_value. - Форматирование вывода осуществляется с помощью спецификатора формата
%02hhx. - Данный спецификатор формата указывает на то, что необходимо вывести значение переменной в шестнадцатеричной системе счисления, при этом обеспечивая выравнивание значения по левому краю и заполнение недостающих символов нулями слева.
- Значение
02hhxв спецификаторе формата означает следующее:0указывает на выравнивание значения по левому краю.2указывает на то, что необходимо вывести два символа.hозначает, что значения должны быть интерпретированы как шестнадцатеричные числа.xозначает, что значения должны быть выведены в шестнадцатеричной системе счисления.
- Если значение переменной
signed_valueявляется отрицательным, то при выводе оно будет дополнено слева нулями до двух цифр. Например, еслиsigned_valueравно -3, то будет выведено-03. - Если значение переменной
signed_valueявляется положительным, то оно будет выведено без изменений. Например, еслиsigned_valueравно 7, то будет выведено07.