原码、补码、反码与移码

原码、补码、反码与移码

在现实生活中我们常常用“+”,“-”号来表示一个数的正负(真值),但是在计算机中无法用正负号表示,所以用二进制的最高位为1表示负,0表示正。而小数则用 ‘.’ 隔开符号位与数值,整数用‘’号隔开。假设用5位表示,则+6为0,0110 -6则为1,0110 。+0.0001则表示为0.0001,-0.0001则表示为1.0001。

一、原码:

1.整数表示:
用最高位表示正负的二进制代码称为原码,如上所述。
而负数如-6 : 1,0110。相当于0110加上10000(10000-(-0110)) 即24
所以原码的表达式可以写成:
在这里插入图片描述
注:这里2n和-2n取不到,因为最高位为符号位,那么最大也只能为0,1111即24-1,最小为1,1111即-(24-1) = -24+1。而0有两种表示,即0,0000或1,0000(24+0)
所以原码整数0有两种表示方法

2.小数:
小数-0.0001可以表示为1.0001,相当于0.0001加上1。
所以小数原码表达式为:
在这里插入图片描述
小数0也有两种表示即0.0000和1.0000。

二、补码
以时钟为例,当从6点到4点可以用6-2 = 4或6+10 = 16,再对16模12余4。所以减一个数相当于加上这个数的补数。例:10-2 = 8 也可写成10 + 8 = 18 再模10余8。而上面的12(钟)和10都是当两个数相加满了的时候进一位所代表的值。而相应的补数是用12或10减去之前的2来得到的。
1.整数:
如-1011,首先对其取补数用10000+(-1011)= 00101。但是怎么来区分0,0101是-1011的补数还是只是+1011?所以我们用最高位为1表示为负数的补数(相当于加上24)。所以-1011的补数为1,0101。
所以0,1010(10)-0,1011(11) = 0,1010+1,0101 = 1,1111(-1)。
注: 这里1,0101最高位即符号位也参与了运算。
所以整数补码表达式如下:
在这里插入图片描述
这里为2n+1是因为第一次求补数加了2n,然后用最高位为1表示是负数的补数又加了2n。-2n能取到因为2n+1-2n=2n,所以-24为1,0000。这里的0只有一种表示形式因为10,0000 + 0 = 10,0000而因为只能用5位表示所以最高位的1被舍掉,所以0表示为0,0000与+0一样。
所以补码的0只有一种表示

2.小数:
在这里插入图片描述

三、反码

1.整数:
如上面10000+(-1011)= 00101所述,10000可以写成0,1111+1
所以上面可以写成0,1111-1011+1即0,0101+1。因为二进制中只有0、1,所以1减去一个数,相当于对这个数取反。
所以补码又可以用一种更快的方式表示,即除符号位外,其他位取反,然后得到的值再加上1。如-1011即1,1011的补码可以表示为1,0100+1=1,0101。
而取反得到的1,1011为反码。
正数的反码与原码、补码一样,所以反码整数的表达式为:
在这里插入图片描述
0有两种表示0,0000和0,1111。
所以反码的0有两种表示方法。
2.小数:
在这里插入图片描述
四、移码

有时候当看补码无法看出大小,如1,0101(-1011)和0,1111可能会误以为1,0101更大,所以为了更好的区分,把两位数都加10000得到0,0101和1,1111注意这里的1在移码中只是一个数,不是符号位。
所以移码的表达式为2n+x,x为真值

计算机中数大多都用补码表示,因为:
1.补码中0只有一种表示形式。
2.补码符号位也参与了计算。
3.由于0只用一种表示法,则可以多表示一位负数。
4.用补码后,减法变成了加法,计算机只用做加法,不用专门设置减法器了。

发布了17 篇原创文章 · 获赞 0 · 访问量 125

猜你喜欢

转载自blog.csdn.net/weixin_45486992/article/details/104641060