原码补码概念知识补全

因为计算机内表示数值使用的是补码,而不是原码,所以你才有这样的疑问。下面我简单解释一下你就明白了。 
原码就是这个数本身的二进制形式。 以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