原码补码反码转换怎么转换(原码,反码与补码怎么计算的)
今天给各位分享原码补码反码转换怎么转换的知识,其中也会对原码,反码与补码怎么计算的进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录
原码、反码、补码之间的转换和简单运算
1、原码转换为反码:符号位不变,数值位分别“按位取反”
2、反码转换为原码也是一样:符号位不变,数值位分别“按位取反”
3、原码转换为补码:符号位不变,数值位按位取反,末位再加1
4、补码转换为原码:符号位不变,数值位按位取反,末位再加1。即补码的补码等于原码
5、求补(变补),即已知[X]补,求[-X]补。符号位和数值位都取反,末位再加1
总结一下:
正整数的原码、反码和补码都一样;负数部分:原码和反码的相互转换:符号位不变,数值位按位取反原码和补码的相互转换:符号位不变,数值位按位取反,末位再加1已知补码,求原码的负数的补码:符号位和数值位都取反,末位再加1
原码反码补码计算器
1、二进制补码的计算方法
二进制的补码计算非常简单,各种教材中也经常使用二进制来说明源码、反码与补码三者的关系,掌握一定基础的人都知道一下规则:
1.1原码
最高位为符号位,0表示正数,1表示负数。
例如:X=0b11(3),四比特表示原码=0011(3);X=-0b11(-3),四比特表示原码=1011(11);
1.2反码
最高位为符号位,0表示正数,1表示负数。
正数的反码等于本身,负数的反码除符号位外,各位取反:
例如:X=0b11(3),四比特表示原码=0011(3),对应反码为=0011(3);X=-0b11(-3),四比特表示原码=1011(11),对应反码为=1100(12);
1.3补码
最高位为符号位,0表示正数,1表示负数。
正数的补码等于本身,负数的补码等于反码+1:
例如:X=0b11(3),四比特表示原码=0011(3),对应反码为=0011(3),补码为=0011(3);X=-0b11(-3),四比特表示原码=1011(11),对应反码为=1100(12),补码为1101(13);
2、十进制的补码计算方法
对于十进制数来说,通过前面的性质不难得到正十进制数补码等于其本身,对于负十进制数来说如果还按位进行运算就太麻烦了!为了讲明白,我们从补码的起因说起:
“反码加一”只是补码所具有的一个性质,不能被定义成补码。负数的补码,是能够和其相反数相加通过溢出从而使计算机内计算结果变为0的二进制码。这是补码设计的初衷,具体目标就是让1+(-1)=0,这利用原码是无法得到的:
而在补码中:
所以对于一个n位的负数-X,有如下关系:
所以假设寄存器是n位的,那么-X的补码,应该是
的二进制编码。
例如前面举得例子:
例如:X=-0b11(-3),四比特表示原码=1011(11),对应反码为=1100(12),补码为1101(13);
如果寄存器4位,-3对应的补码二进制数为13,刚好是
正十进制数补码等于其本身,n位寄存器下-X的补码等于
对应的二进制编码。
如果使用python的话,可以使用&来快速获取补码:
-3&0xfOut[1]:135&0xfOut[2]:5
这里的0xf指的是0b1111,表示4位的寄存器。如果是7位寄存器,0b111111就是0x3f。
3、已知补码怎么求原码?
对于正数来说,根据前面的介绍很容易知道原码=补码=反码,接下来主要讨论给定负数的补码怎么求负数的原码:
3.1二进制
先说结论:补码的补码就是原码。下面开始证明:
已知二进制的补码为
,根据1.3中求补码的过程易得
事实上上式还等价于:
可以简单证明一下,根据反码实际的求解过程可以得到下面式子:
当a=a-1时有:
上面两式子说明了:
用文字描述即:取反加一等价于减一取反!
所以二进制补码有如下关系:
也就是说补码的补码就是原码,有点负负得正的意思哦。
3.2十进制
n位寄存器下-X的补码等于
对应的二进制编码。
(1)十进制的情况下,如果给的补码是无符号数
,那么原码即
即可。
例如前面-3补码无符号数是13,对应的原码就是
(2)十进制的情况下,如果给的补码是有符号数-Y,对应的无符号数就是
,那么原码就是
。
例如前面-3补码有符号数是-5,对应的原码就是
编辑于2021-10-3013:39
原码,反码与补码怎么计算的
首先看正数,先将十进制的正数转换成二进制形式。
2.
之后可以根据原码直接写出补码和反码,因为正数的补码和反码就等于原码。
3.
负数情况不一样,将一个十进制负数转换成原码。
4.
再将原码转换成反码,注意前四位符号位不变,后四位数字位全部取反。
小数的原码,反码,补码怎么求
先转换成原码,小数点左边为符号位(正数——0;负数——1),然后转换成反码(即每一位取反),最后再加1.eg:x=-0.11101转换成原码x=1.11101;然后转换反码x=1.00010;最后转换成补码(即+1)x=1.00011.PS:符号位在转换反码的时候不需要取反。
关于本次原码补码反码转换怎么转换和原码,反码与补码怎么计算的的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。