原码、反码、补码的运算及在计算机中的作用

一、概念简述

机器码:一个数在计算机中的二进制形式,机器码是带符号的,在计算机用机器码的最高位存放符号,正数为0,负数为1。
              如 0000 0011 和 1000 0011。
机器码的真值:机器码除符号位剩下的真正数值。
              如 0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1。
原码:数值的二进制表示形式,用来转换对应的进制。
              如:    [+1]原= 0000 0001
                          [-1]原= 1000 0001
反码:符号位不变,进制码0变1,1变0叫做反码,反码用于原码补码之间的转换。
              如:    [+1] = [0000 0001]原= [0000 0001]反,
                         [-1] = [1000 0001]原= [1111 1110]反
补码:反码加1,用来做数据的存储运算。
              如:    [+1] = [0000 0001]原= [0000 0001]反= [0000 0001]补
                         [-1] = [1000 0001]原= [1111 1110]反= [1111 1111]补

二、运算规则

(原码 反码 补码之间的转换 , 符号位不要动)
正数: 原码 = 反码 = 补码
负数: 原码 = 补码取反加1   给补码求原码
负数: 补码 = 原码取反加1   给原码求补码

可以看出,反码用于原码与补码之间的转换。

三、作用

由上可见原码,反码和补码是完全不同的。既然原码才是被人脑直接识别并用于计算表示方式,为何还会有反码和补码呢?

首先, 因为人脑可以知道第一位是符号位,在计算的时候我们会根据符号位,选择对真值区域的加减。但是对于计算机,加减乘除已经是最基础的运算,要设计的尽量简单,计算机辨别"符号位"显然会让计算机的基础电路设计变得十分复杂!

于是人们想出了将符号位也参与运算的方法。我们知道,根据运算法则减去一个正数等于加上一个负数,即:1-1 = 1 + (-1) = 0, 所以机器可以只有加法而没有减法,这样计算机运算的设计就更简单了。

于是人们开始探索将符号位参与运算,并且只保留加法的方法。

四、运算例子

求10 +(- 12) = ? 
补码用来做数据的存储运算,因此先求10和-12的补码
10的补码(=反码=原码):0000 1010(高位为0,表示正数)

-12的原码: 1000 1100 (高位为1,表示负数,转换为10进制时,高位的1不用进行换算) 
     反码: 1111 0011 (原码取反) 
     补码: 1111 0100 (反码加1)

补码做相加运算
 10的补码: 0000 1010

-12的补码: 1111 0100
         -------------
结果(补码): 1111 1110

补码再转换为原码(即补码的补码,同样做取反加1换算)
补码:   1111 1110(高位为1,表示负数,进行补码反码原码换算时是不变的)

反码:   1000 0001(补码取反)
原码:   1000 0010(反码加1)
10进制: -2

参考:https://zhuanlan.zhihu.com/p/91967268?utm_source=wechat_session

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值