黑铁时代
Programing is not only one kind of technology, but also one kind of art.

  现实生活中,我们通常使用10进制来表示我们的数字,而在计算机中使用的是“0”和“1”表示数字的二进制。

  如果我们用一个字节来存储一个数字,那么这个数字在计算机中的存储形式可能是这样的:00010011。最左边的0位在带符号数字中用来表示正负号,0代表正号,1代表负号,所以它也就叫做符号位;其他位数用来表示具体数字,因此叫做数值位。

  00010011如果用来表示带符号整数,那么它代表的数字是+19。+19叫做真值,00010011用于在计算机中表示,所以叫做机器数

  机器数在计算机中的表示形式有三种,原码,反码和补码。

  原码的表示:

    左边是符号位,正数为0,负数为1。其他位表示数值

    【+10】原码 = 00001010

    【-10】原码 = 10001010 

    【+0】原码 = 00000000

    【-0】原码 = 10000000

  反码的表示:

    正数的反码和原码相同,负数的反码由原码除了符号位的其余位取反(即0表1,1表0)

    【+10】反码 = 00001010

    【-10】反码 = 11110101

    【+0】反码 = 00000000

    【-0】反码 = 11111111

  补码的表示:

    正数的补码与原码相同,负数的补码由原码的反码加1得到

    【+10】补码 = 00001010

    【-10】补码 = 【-10】反码 + 1 = 11110101 + 1 = 11110110 

    【+0】补码 = 00000000

    【-0】补码 = 【-0】反码 + 1 = 11111111 + 1 = 【1】00000000(mod(256))

  补码的意义:补码实际上是一种模运算,以时钟为例,时钟一圈是12个小时,即时钟的模为12。如果当前时刻是3点钟,在12个小时之后时刻变为15点,15在模12之后,依然是3点。再如,将3点的时针调慢一个小时,即调成2点,和将时针向前调整11个小时的效果是一样的。因此用3-1和(3+11)mod(12)的结果一样。补码在机器码中的运用主要是用加法元算代替减法运算。CPU的加法器简单效率高,因此不需要再专门实现减法器。

  在8位字中,我们的模就是2的8次方,即256。例如:

    直接减法:01000000(64)— 00001010(10) = 00110110(54)

    用补码代替减法:01000000(64)+(11110110)(246)= 00110110(54) 

  两种运算结果是一样的。

 

posted on 2015-01-05 11:46  黑铁时代  阅读(5090)  评论(0编辑  收藏  举报