大学时期的知识,一直没用,今天在看TCP/IP协议的时候,又有点迷糊了,现在简单回顾一下吧!
先补充几个概念:(以下二进制数都是以8位表示)
机器数:一个数在计算机中的二进制表示形式。最高位为符号位(0为正,1为负)。例如:+5 的机器数是00000101,-5的机器数就是10000101。
真值:将带符号位的机器数对应的真正数值称为机器数的真值。例如:上面提到的+5,-5就是真值。
原码:即符号位加上真值的绝对值。(因为最高位是符号位,所以8位二进制的取值范围是[1111 1111 , 0111 1111]即[-127 , 127])。例如:[+1]原= 0000 0001,[-1]原 = 1000 0001。
反码:正数的反码是其本身,负数的反码是其原码,符号位不变,其余位各取反。例如:[+1] = [0000 0001]原 = [0000 0001]反,[-1] = [1000 0001]原 = [1111 1110]反
补码:正数的补码是其本身,负数的补码是其原码,符号位不变,其余位各取反,最后+1(即反码+1)。例如:[+1] = [0000 0001]原 = [0000 0001]反 = [0000 0001]补,[-1] = [1000 0001]原 = [1111 1110]反 = [1111 1111]补。
对于很多人纠结的-0的补码的问题,看了很多文章,总结就是在补码里面,不考虑-0这个数,具体原因还是自己去找找吧,我也没弄太懂。这里看到过有提到一个关于补码的来源,即模减去其绝对值。