好的,这是一个我以前从未见过的奇怪问题:
#include <iostream>
int main()
{
char testchar = 255;
std::cout << (unsigned int)testchar << std::endl;
}
输出:
4294967295
这到底是怎么回事?似乎因为 char 是“满的”,所以当它生成新的 unsigned int 类型时,结果也是“满的”。这不是我记得或期望的结果。我希望 unsigned int 的值为 0x000000FF。任何人都可以向我解释到底发生了什么吗?
系统:Ubuntu 12.04 64位
g++版本:4.6.3
最佳答案
您的 char
显然已签名。这意味着 255
溢出了 char
。由于您显然是在 2 的补码机器上,因此 255 的位模式存储在 char
中(即,所有位都已设置)。当解释为带符号的 8 位数字时,即为 -1。
然后 that 值被符号扩展为 32 位 int
,给出 32 个 1 位(但相同的值,-1
).最后,该值被转换为 unsigned int
。根据以 232-1 为模的约简规则,给出最大可能的 32 位数 (4294967295)。
关于c++ - 转换一个值为 255 的 char 会导致 unsigned int 值为 4294967295,这是什么原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13225538/