为什么char二进制最小的数为 |
您所在的位置:网站首页 › char大于127怎么算 › 为什么char二进制最小的数为 |
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 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |