我遇到了一个代码,我无法理解:
3 1 0 0
输出结果为:
X Output
127 127 0 0 0
128 -128 0 0 0
256*127 0 127 0 0
256*128 0 -128 0 0
我尝试将x更改为许多不同的数字,结果让我更加困惑
char *p = (char*)&x;
等......
有人可以解释在
中指向的内容{{1}}
它打印出来的是什么。 谢谢。
答案 0 :(得分:2)
int x=259;
char *p = (char*)&x;
x是4字节0x03 0x01 0x00 0x00
,因为您所在的机器是小端(请参阅https://en.wikipedia.org/wiki/Endianness)
所以
您可以对其他值进行相同的分析。
答案 1 :(得分:1)
取决于您的架构。
它指向int表示的第一个字节。
在小端机器上,它将是259的低位字节,即3。
在大端机器上,它将为零。
答案 2 :(得分:1)
X is an int (4 bytes) But p is a pointer to a char (1 byte). So p is pointing to the first byte of the int representation.
Thats why you are getting 3 1 0 0
because 256 is represented that way 0x03 0x01 0x00 0x00
on a little endian machine.
In the other cases you are getting the minus (e.g -128) because the first bit of the byte is 1. And it thinks that it' a negative number.
(the binary representation of 128 on a little endian machine is : 10000000 00000000 00000000 00000000
)