我扫描了一个 int 变量的字节表示,得到了一些意想不到的结果。
如果我这样做
int a = 127;
cout << (unsigned int) *((char *)&a);
我得到了预期的 127。如果我这样做
int a = 256;
cout << (unsigned int) *((char *)&a + 1);
我按预期得到 1。但如果我这样做
int a = 128;
cout << (unsigned int) *((char *)&a);
我有 4294967168,好吧……非常奇特。
问题是:当查看值为 128 的 int 变量的第一个字节时,有没有办法得到 128?
最佳答案
出于与 (unsigned int)(char)128
为 4294967168 相同的原因:char
在大多数常用系统上默认已签名。 128 不适合带符号的 8 位数量,因此当您将其转换为 char
时,您会得到 -128(十六进制的 0x80)。
然后,当您将 -128 转换为 unsigned int
时,您会得到 232 - 128,即 4294967168。
如果你想得到 +128,那么使用 unsigned char
而不是 char
。
关于c++ - 变量的字节表示形式出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13275834/