数在计算机中是以二进制形式表示的,分为有符号数和无符号数。
原码、反码、补码都是有符号定点数的表示方法。
一个有符号定点数的最高位为符号位,0是正,1是副。
1.原码就是这个数本身的二进制形式。
例如:0000001 就是+1 1000001 就是-1
2.正数的反码和补码都是和原码相同。
负数的反码是将其原码除符号位之外的各位求反。
[-3]反=[10000011]反=11111100
负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。
[-3]补=[10000011]补=11111101
一个数和它的补码是可逆的。
3.设立补码的原因有两个:
第一是为了能让计算机执行减法:[a-b]补=a补+ (-b)补
第二个原因是为了统正0和负0正零: 00000000 负零: 10000000
这两个数其实都是0,他们的原码却有不同的表示,但是他们的补码是样的, 都是0000000
那么,000000这个补码表示的哪个数的补到呢?
其实这是一个规定,这个数表示的是-128 所以n位补码能表示的范围是 -2^(n-1)到2^(n-1)-1 比n位原码能表示的数多一个.
4.总结:
在计算机内,定点数有3种表示法:原码、反码和补码
所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0” 表示正,“1” 表示负,其余位表示数值的大小。
反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码表示法规定:正数的补码与其原码相同:负数的补码是在其反码的求位加1。