计算机的源码、反码、补码

源码就不须要说了,先说补码,

为什么先说补码?

因为反码是由补码产生的,看下面:

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

特性


1、一个负整数(或原码)与其补数(或补码)相加,和为模。
2、对一个整数的补码再求补码,等于该整数自身。
3、补码的正零与负零表示方法相同。
模的概念可以帮助理解补数和补码。
“模”是指一个计量系统的计数范围。如时钟等。计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”。例如:
时钟的计量范围是0~11,模=12。表示n位的计算机计量范围是0~2^(n)-1,模=2^(n)。
“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。任何有模的计量器,均可化 减法加法运算。
例如:假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法:一种是倒拨4小时,即:10-4=6;另一种是顺拨8小时:10+8=12+6=6
在以12模的系统中,加8和减4效果是一样的,因此凡是减4运算,都可以用加8来代替。对“模”而言,8和4互为补数。实际上以12模的系统中,11和1,10和2,9和3,7和5,6和6都有这个特性。共同的特点是两者相加等于模。
对于计算机,其概念和方法完全一样。n位计算机,设n=8, 所能表示的最大数是11111111,若再加1成为100000000(9位),但因只有8位,最高位1自然丢失。又回了00000000,所以8位 二进制系统的模为2^8。在这样的系统中 减法问题也可以化成加法问题,只需把 减数用相应的 补数表示就可以了。把补数用到计算机对数的处理上,就是补码。
另外两个概念:()
(一):ones' complement:这种表示法中,正数保持不变(因为这个方案就是要解决有效地将减法运算变成加负数的运算,所以,正数不需要变动,这里的反,就是相对于正数的二进制形式来说的),负数用公式
   
[1]   (n为将符号位算在内的位数)计算。可以形象的将对应的正数的二进制形式的各个位取反即可。(这里和得到反码的步骤不一样。反码,补码,都是从原码开始操作得到。这里是从正数开始操作得到。但两者除了计算的起点不同,最终得到的编码形式是这样的。为了区别操作过程的不同,故仍然采用英文名。)
用四位二进制数做例子。那么-7的二进制(0111)各各位取反得到其ones complement数(1000)。就是其中最左边的一位为符号位。N=7 ,n=4,带入公式,得
   
=-7以及其二进制形式,过程如下:
2^{4}= 10000
减1 - 0001
01111
减7 - 0111
0 1000加粗的这部分呈现的是 -7.
上面是为了下面做铺垫
(二):twos complement:由于上面一种表示法
   
[1]   (n为将符号位算在内的位数)
观察公式,twos complement数,相当于ones complement 数+1.
下面用4位二进制数来做例子:
2^{4}= 10000 2^{4}= 10000
加1  01001
01001加粗部分表示-7 0 0111 加粗部分表示+7

猜你喜欢

转载自blog.csdn.net/qq_24212243/article/details/79214103