@evg_96

Как вывести каждый байт значения типа int?

Нужно было вывести каждый байт значения типа int.
int value = 257;

for (int i = 0; i < sizeof(int); i++)
  printf("%hhd ", *(((char *) &value) + i)); // 1 1 0 0


Откуда появляются отрицательные числа в ответе? Например если использовать число 1234, то в моем случае вывод будет равен -46 4 0 0
  • Вопрос задан
  • 3104 просмотра
Решения вопроса 1
Nipheris
@Nipheris Куратор тега C++
1. char - знаковый тип. Используйте unsigned char, а лучше std::byte если он доступен вам.
2. проверьте форматную строку.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
1234 в шестнадцатеричной системе 4D2.
Младший байт равен D2, в двоичной системе это: 1101 0010
Как видите старший бит установлен в 1 - значит, если это знаковое число, то оно отрицательное и закодировано дополнительным кодом. Осталось только разложить D2 в дополнительном коде и получите -46 - это результат вам и вывела printf.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы