为什么char二进制最小的数为

您所在的位置:网站首页 char大于127怎么算 为什么char二进制最小的数为

为什么char二进制最小的数为

2024-07-13 15:40| 来源: 网络整理| 查看: 265

char是C/C++整型数据中比较古怪的一个,其它的如int/long/short等不指定signed/unsigned时都默认是signed。虽然char在标准中是unsigned(因为char类型提出的初衷是用来表示ascii码,ascii码的范围是0~127),但实际情况中究竟是signed还是unsigned取决于编译器。 vs2013中默认为signed. -128 和-0的区别,其实根本就没有联系。但是容易迷惑。

因为我们说 -128的时候,其实是在说补码,他本身是补码。而我们说-0的时候,是说的原码。 char类型中-128是没有原码补码的,8位表达不出来。

unsigned char; //char为1个字节,8个比特位 //无符号那么范围就是0000 0000————1111 1111 //转换为2进制为,0——2^8-1 // 0——255 signed char; //有符号,最高一位是符号位,除去符号位还有7位 //那么范围就是1111 1111————0111 1111 // -2^7—————2^7-1 // -127——————127 // -128——————127

按照上述的步骤按理来说signed char的取值范围就是-127—127了,但是有符号数有个特殊的存在 0,他的二进制表示为0000 0000。有符号所以(-0表示)为1000 0000.但是-0没有意义,他实际表示出来也就是0,他两用一个相同的二进制表示就可以了。 那么1000 0000 怎么办,那么就给他顺延后去,所以实际取值范围-128—127 1表示负数,所以规定-128。还有一个原因: 128原码: 0000 0000 0000 0000 0000 0000 1000 0000 -128的原码: 1000 0000 0000 0000 0000 0000 1000 0000 取反 : 1111 1111 1111 1111 1111 1111 0111 1111

加1得到-128的补码: 1111 1111 1111 1111 1111 1111 1000 0000 存进去 : 1000 0000 补码正好是: 1000 0000 所以规定signed char 类型见到1000 0000表示为-128有两个原因:

1.不能造成浪费,它要表示个东西。1表示为负,往后顺延一位。 2.经过计算发现4字节得到-128的补码,经过截断至1字节后刚好表示为1000 0000



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3