Его шестнадцатеричные и двоичные значения будут точно такими же (за исключением, возможно, начальных нулей, если вы хотите расширить его до полного размера).
Это потому, что 123 отлично вписывается в char
.Знаковый символ может содержать по крайней мере значения от -127
до 127
(дополнение двух может обрабатывать -128
, но стандарт ISO допускает дополнение и знак / величину как два других кодирования для отрицательных чисел, ни одно из которых не может обрабатывать-128
), беззнаковый символ не менее 0
через 255
.
Предполагая 8-битный байт и 4-байтовый int:
Value HexInt HexChar BinaryInt BinaryChar
----- ------ ------- --------------------------------------- ----------
123 7B 7B 0000 0000 0000 0000 0000 0000 0111 1011 0111 1011
Двоичное значение 0111 1011
рассчитывается следующим образом:
0111 1011
||| | ||
||| | |+- 1
||| | +-- 2
||| |
||| +---- 8
||+------ 16
|+------- 32
+-------- 64
===
123
Если вы пытаетесь поместить значение в 8-битный char
, который был больше 8 бит, то младшие значащие биты обычно сохраняются.
char xyz = 0x1234; // results in xyz being given the value 0x34.
Это подробно описано в C99, раздел 6.3.1.3/2
и /3
:
1 / Когда значение с целочисленным типом преобразуется в другой целочисленный тип, отличный от _Bool, еслизначение может быть представлено новым типом, оно не изменяется.
2 / В противном случае, если новый тип является беззнаковым, значение преобразуется путем многократного сложения или вычитания более одного максимального значения, которое может быть представленов новомвведите, пока значение не окажется в диапазоне нового типа.
3 / В противном случае новый тип подписывается и значение не может быть представлено в нем;либо результат определяется реализацией, либо определяется сигнал реализации.