好的,这是我以前从未见过的一个奇怪的问题:
#include <iostream>
int main()
{
char testchar = 255;
std::cout << (unsigned int)testchar << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
输出:
4294967295
Run Code Online (Sandbox Code Playgroud)
到底是什么?似乎因为char是"full",当它生成新的unsigned int类型时,结果也是"full".这不是我记得或我期望的结果.我希望unsigned int的值为0x000000FF.任何人都可以向我解释这里到底发生了什么吗?
系统:Ubuntu 12.04 64位
g ++版本:4.6.3
你char显然签了名.这意味着它255正在溢出char.因为你显然是在2的补码机器上,所以255的位模式存储在char(即所有位都被置位).当解释为带符号的8位数时,则为-1.
然后将该值符号扩展为32位int,给出32位(但值相同-1).最后,该值转换为unsigned int.据至由还原模2所做的规则32 -1,这给了最大可能的32位数字(4294967295).