c++ - 变量的字节表示形式出现意外结果

标签 c++ c casting

我扫描了一个 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/

相关文章:

c++ - 全局(外部)变量的交叉初始化

c++ - IE8打开网站流程

Java 转换问题

即使结构体成员按递减对齐方式排序,C 是否可以在结构体成员之间添加填充?

c - 指向结构的指针,试图引用其数据成员 - C

sql - 在 VARCHAR 列上创建 INT 索引

java - Java 赋值期间的转换

带指针的 C++ 结构 : constructor and destructor

c++ - 使用 std::basic_istringstream 和 std::quoted 读取 std::string 末尾的带引号的字符串时设置失败位

c++ - move 者困境