因为计算机内表示数值使用的是补码,而不是原码,所以你才有这样的疑问。下面我简单解释一下你就明白了。
原码就是这个数本身的二进制形式。 以8位二进制为例
0000001 就是+1
1000001 就是-1
补码分为两种情况:1、正数的补码与原码一样;2、负数的补码是符号位保持不变,其余各位取反,再加1。
反码就是负数符号位不变,其余各位取反,正数反码与原码相同。
以四位二进制为例,其原码、反码、补码为:
真值 原码 反码 补码
7 0111 0111 0111
6 0110 0110 0110
5 0101 0101 0101
4 0100 0100 0100
3 0011 0011 0011
2 0010 0010 0010
1 0001 0001 0001
0 0000 0000 0000
-0 1000 1111 0000
-1 1001 1110 1111
-2 1010 1101 1110
-3 1011 1100 1101
-4 1100 1011 1100
-5 1101 1010 1011
-6 1110 1001 1010
-7 1111 1000 1001
为什么要设立补码呢?
第一是为了能让计算机执行减法:[a-b]补=a补+(-b)补
第二个原因是为了统一正0和负0
正零:00000000
负零:10000000
这两个数其实都是0,但他们的原码却有不同的表示。
但是他们的补码是一样的,都是00000000
16位二进制原码表示的负数是 -0~-32767,包括-0加起来是32768个数;因为补码加了1,所以补码的表示范围是 -1~-32768,也是32768个数。
n位补码能表示的范围的公式是
-2^(n-1)到2^(n-1)-1
比n位原码能表示的数多一个
原码补码概念知识补全
猜你喜欢
转载自backsnow.iteye.com/blog/1169857
今日推荐
周排行