我在C中有以下示例:
int x = 123;
size of int = 4 bytes.
hex value = 7b
binary value = 0111 1011
如果我的x是char,那么十六进制/二进制值是什么?
char x = 123;
size of char = 1 byte.
hex value = ??
binary value = ??
答案 0 :(得分:2)
由于char
小于int
,因此它会相同。除了前导零,你会在int
中找到。
试试这个:
6 int x = 123;
7
8 printf ("Size of int is %d bytes\n", sizeof(int));
9 printf ("Size of char is %d byte\n", sizeof(char));
10
11 printf ("Hex value is %x\n", x);
12 printf ("Hex value is %x\n", (char)x);
13
14 printf ("As for binary value .... google is your friend\n");
输出是:
Size of int is 4 bytes
Size of char is 1 byte
Hex value is 7b
Hex value is 7b
至于二元价值......谷歌是你的朋友 这site似乎可以很好地解释
答案 1 :(得分:1)
它的十六进制和二进制值将完全相同(如果你想将它扩展到完整大小,可能除了前导零)。
那是因为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位的8位char
,则最低有效位通常是保留的位。
char xyz = 0x1234; // results in xyz being given the value 0x34.
详见C99,6.3.1.3/2
部分和/3
:
1 /当整数类型的值转换为_Bool以外的另一个整数类型时,如果该值可以用新类型表示,则它不会改变。
2 /否则,如果新类型是无符号的,则通过重复加或减一个可以在新类型中表示的最大值来转换该值,直到该值在新类型的范围内。 / p>
3 /否则,新类型已签名且值无法在其中表示;结果是实现定义的,或者引发实现定义的信号。
答案 2 :(得分:0)
十进制123是十六进制的0x7b和二进制的0111 1011,与原始类型无关。类型阻碍的唯一时间是溢出(例如int x = 48273; char y = (char)x;
)。有时,signed char
和unsigned char
的显示可能会有所不同。
答案 3 :(得分:0)
会是一样的。 0x7b hex,0111 1011
注意,如果你的整数是4个字节,那么它的位是0000 0000 0111 1011。