原码反码与补码

大家知道,计算机只识别加法,那么减法如何计算呢?比如1-1=0。这就借助于补码的功能了,那么补码是什么呢?

说起补码,首先需要说清机器数与真值,继而引发出原码反码补码的一系列知识点。

先说机器数,一个数在计算机中的二进制表示方式,叫做这个数的机器数。机器数都是带符号的,在机器中用最高位存放符号,正数为0,负数为1。比如,十进制中的3,计算机字长为8为,用机器数表示则为00000011;十进制中的-3,用机器数表示则为10000011。

再说真值,因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面有机器数10000011,它代表着-3而不代表131(根据二进制转换得到的十进制数),所以,为区别起见,带符号位的机器数对应的真正数值成为机器数的真值。即10000011的真值为-3,00000011的真值为3。

下面进入重头戏,原码反码与补码。它们都是由符号位和数值位构成,首先来看原码。

1、原码是符号位加真值的绝对值,即用第一位表示符号,其他位表示值,比如是8位二进制,[3]原=00000011,[-3]原= 10000011。第一位是符号位,其他7位是数值位,所以8位二进制的取值范围就是:[11111111, 01111111],即[-127, 127]。 原码是人脑最容易理解和计算的表达方式。

2、反码的表示方式是:①正数的反码是它本身;②负数的反码在其原码的基础上,符号位不变,其他各个位取反。例如[3] = [00000011]原 = [00000011]反; [-3] = [1000011]原 = [11111100]反。可见如果一个反码表示的是负数,人脑无法直接看出它的数值,需要先转变为原码再计算。

3、补码的表示方法是:①正数的补码是它本身;②负数的补码是符号位不变,其他数值位全部取反,然后+1(即在反码的基础上+1)。例如:[3]=[00000011]原 = [00000011]反 = [00000011]补;[-3] = [10000011]原 = [11111100]反 = [11111101]补。

一个很神奇的现象出现了,[11111101]补 = [00000011]补 = [00000000]补 = [0],即 3 + (-3) = 0, 这样就实现了减法(3-3)的效果,不得不佩服前辈们的聪明才智啊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值