[英]Casting a char valued 255 leads to an unsigned int value of 4294967295, what gives?
好的,这是我以前从未见过的一个奇怪的问题:
#include <iostream>
int main()
{
char testchar = 255;
std::cout << (unsigned int)testchar << std::endl;
}
输出:
4294967295
到底是什么? 似乎因为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)进行的规则。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.