您的位置:首页 > 其它

为什么char能表示-128

2012-11-08 09:31 316 查看
以前一直不太理解为什么8位的char能表示-128,于是到网上去百度,原来就是这么规定的。哎,。。。

由于-128的原码用8位无法表示,所以必须扩展到16位去表示,然后对16位的原码计算出16位的反码和补码,最后对16位的补码作低8位的截断,截断的低8位的值就是-128的补码了。

// 8位所能表示的  原码 的范围-127到+127
// 8位所能表示的  反码 的范围-127到+127
// 8位所能表示的  补码 的范围-128到+127

// 计算机当中,是规定-128的补码是1000 0000
// 算的时候则需要扩展到16位来算。否则,第8位到底表示符号还是表示数值2的7次方呢?所以,8位就按8位的通常看法来看, -128  的补码是  1000 0000
// 是难以理解的。只能扩展后来看。

// -128  原码 1000 0000 1000 0000
// -128  反码 1111 1111 0111 1111
// -128  补码 1111 1111 1000 0000

// -129  原码 1000 0000 1000 0001
// -129  反码 1111 1111 0111 1110
// -129  补码 1111 1111 0111 1111

int main(int argc, char* argv[])
{
char ch = -129; // warning C4309: 'initializing' : truncation of constant value
char ch2 = -128; // no warning
return 0;
}


注意:由于char能表示的范围是:-128~127,如果将-129赋给char,编译的时候是会产生warning的,并会截断,截断后的值是0x7f(127)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: