为什么char的取值范围为是-128-127?
char是由8位的二进制组成,8位二进制能表示的最大值是 1111 1111,用十进制表示就是255,那怎么去表示负数呢?
规定用第一位去表示符号位,1表示负数、0表示正数。例如1111 1111就表示 -127,0111 1111表示+127。
那么我们去想个问题1000 0000和0000 000分别代表什么?
大家一看可能就会觉得太简单了吧,不就是-0和+0嘛。但是在计算机的世界里-0和+0都是0,所以为为了扩大char的表示范围我们就规定1000 0000表示 -128。
那么我们再去想一个问题为什么是1000 0000代表-128而不是0000 0000代表-128?
首先由上面讲述的规则可以知道0是代表正数,使用0000 0000表示正数会更合适
还有就是我们可以从我们人的习惯来看,让一个char从0000 0000一直加到1111 1111,可以发现是先0000 0000再到1000 0000,使用用0000 0000表示0,1000 0000表示-128符号我们正常的加法习惯。
int main()
{
char i = 0; // 0000 0000
for (int j = 0; j < 256; j++)
{
printf("%d、", i++);
}
return 0;
}
127之后为什么是-128呢?
char 是有符号位, 8位.
内存中 00000000; 00000001; 00000002 ......... 01111111(127).
内存中补码加1, 10000000(-128); 10000001(-127); 10000010(-126) ..........
所以是这么个打印顺序.
所以原文章理解错了. 原码进制转换才是我们看到的数, 而不是补码来表示我们看到的数.
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/mucherry/article/details/131841810