【原码、补码、移码】计算总结

原码、补码、移码


首先:
原码,反码,补码的引入是为了解决计算机做减法的问题。
(下面举例都是 8 位)

1. 原码

原码:是最简单的机器数表示法。用最高位表示符号位,‘1’表示负号,‘0’表示正号。其他位存放该数的二进制的绝对值。

正数原码 : 7 :0000 0111;【x】+ x x x
负数原码:-7:1000 0111;【x】+ 2 n − 1 + x 2^{n-1}+x 2n1+x
0 分为 +0 和 -0

但是计算机在用原码直接计算的时候会有问题,例如:
0000 0001(1) + 1000 0001(-1) = 1000 0010(-2)

就是说正数加负数会出现问题,也相当于正数减法出问题。

2. 补码

因为计算机数字都是有固定位数,也就是说有个一最大值,超过这个值就会溢出。每次结果相当于都会取余最大值。在取余运算中加上一个负数就等于加上这个负数对余数的模数。

假设 10 为最大值。 4 + (-2) = 4 + (10-2) MOD 10 = 4 + 8 MOD 10 = 2
这里 (10-2)就是(-2)的模数。对应到二进制,就是负数的补码。通过补码,减法就转化为了加法。

正数补码: 【x】+ x x x
负数补码: 【x】+ 2 n + x 2^{n}+x 2n+x
0 补码:0000 0000

负数求补码方法:

  • 符号位不变,其他位取反加 1
  • 符号位不变,从右边第一个 1 之前不变,其他取反
3. 移码

用补码虽然计算简单,但是要判断两个数的大小不能很直观的看出,因此有了移码:

移码:【x】+ 2 n − 1 − 1 + x 2^{n-1} - 1 + x 2n11+x

它使在一定位情况下,最小的负数变为 0,最大的正数变为(111…111),方便比较大小。

计算:补码符号位取反

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值