繁体   English   中英

转换值为255的char导致unsigned int值为4294967295,是什么给出的?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM