有符号byte范围如何计算?

来源:互联网 发布:php怎么写爬虫 编辑:程序博客网 时间:2024/05/17 22:22
首先,难不免干点白痴般地事情,穷举一下...
正数,原码跟补码一样 
+127,0111 1111 
+126,0111 1110 
+125,0111 1101 
+124,0111 1100 
+123,0111 1011 
+122,0111 1010 
...
+4,0000 0100 
+3,0000 0011 
+2,0000 0010 
+1,0000 0001 
0,0000 0000 (无正负之分) 
下面是负数了,值,原码,符号位不变其它取反,+1 
-1,1000 0001,1111 1110,1111 1111 
-2,1000 0010,1111 1101,1111 1110 
-3,1000 0011,1111 1100,1111 1101 
-4,1000 0100,1111 1011,1111 1100 
-5,1000 0101,1111 1010,1111 1011 
-6,1000 0110,1111 1001,1111 1010 
-7,1000 0111,1111 1000,1111 1001 
-8,1000 1000,1111 0111,1111 1000 
-9,1000 1001,1111 0110,1111 0111 
-10,1000 1010,1111 0101,1111 0110 
-11,1000 1011,1111 0100,1111 0101 
-12,1000 1100,1111 0011,1111 0100 
-13,1000 1101,1111 0010,1111 0011 
-14,1000 1110,1111 0001,1111 0010 
-15,1000 1111,1111 0000,1111 0001 
-16,1001 0000,1110 1111,1111 0000 
-17,1001 0001,1110 1110,1110 1111 
...
-24,1001 1000,1110 0111,1110 1000 
...
-99,1110 0011,1001 1100,1110 0100 
...
-124,1111 1100,1000 0011,1111 1101 
-125,1111 1101,1000 0010,1000 0011 
-126,1111 1110,1000 0001,1000 0010 
-127,1111 1111,1000 0000,1000 0001 
看出点什么了没有?
如果没有,那么,给个提示,再继续下去,下一个补码是什么呢?
当然是 
-128,先略过,再略过,1000 0000 
1000 0000,那么,它的原码是什么呢?
从补码求原码的方法跟原码求补码是一样的 
先保留符号位其它求反:1111 1111,再加1:11000 0000,超过了8位了 
对,用8位数的原码在这里已经无法表示了 
关键就在这里,补码 1000 0000 为 -128 是不用怀疑的(上面的穷举),
那么,回到原码处,它的原码也是 1000 0000(超出的自动丢失),
1000 0000 在原码表示什么呢?-0,但补码却规定0没有正负之分 
转换一下思路,看看计算机里,是怎么运算的:
对于负数,先取绝对值,然后求反,加一 
-128 -> 128 -> 1000 0000 -> 0111 1111 -> 1000 0000 
现在明确了吧 
所以,8位有符号的整数取值范围的补码表示 
1000 0000 到 0000 0000,再到 0111 1111 
即 -128 到 0,再到 127 
最终 -128 +127
1 0
原创粉丝点击