对原码、反码和补码的理解

1、原码:(此处数值示例使用1个字节表示)

  数值3的原码为:0000 0011

  数值-3的原码为:1000 0011

注解:原码使用字节的最高位表示符号值:0代表正数,1代表负数,剩下的表示该数的绝对值二进制数。如果在此基本上进行加法运算,则3 + (-3) => 0000 0011 + 1000 0011 = 1000 0110 => -6,实际结果并不符合逻辑,所以在计算机上使用原码表示法有局限性

 

2、反码:

  数值3的反码为:0000 0011

  数值-3的反码为:1111 1100

注解:正数的反码和原码相同,负数的反码转为规则为最高位符号位保留,对其它位进行按位取反。则3 + (-3) => 0000 0011 + 1111 1100 => 1111 1111 => -127,实际结果也不符合逻辑,使用反码表示也不可行

 

3、补码:

  数值3的补码为:0000 0011

  数值-3的补码为:1111 1100 + 1 => 1111 1101

注解:正数或0则补码与其原码相同;负数则先获取其绝对值的二进制数,再按位取反,最后加1得到该数的补码。3 + (-3)  => 0000 0011 + 1111 1101 => 0000 0000  => 0,符合逻辑满足要求,因此计算机是以补码形式来表示数值的。

 引申:减法计算都可以转为正数加负数的形式,在此基础上,计算机cpu的电路设计上就可以不必设计减法器电路了,只需设计加法器电路,也简化了电路设计。

(1) 1 + (-1) = 0 
=> 0000 0001 + ? = 0000 0000
=> ? = 1111 1111 (是某个负数的补码,先减去1得到1111 1110,再按位取反1000 0001,即-1的原码)
(2) 2 + (-2) = 0
=> 0000 0010 + ? = 0000 0000
=> ? = 1111 1110 (减1得1111 1101,按位取反得1000 0010,即-2的原码)
() 3 + (-3) = 0
=> 0000 0011 + ? = 0000 0000
=> ? = 1111 1101 (减1得1111 1100,按位取反得1000 0011,即-3的原码)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值