十进制也可以像二进制那么骚

原码、反码、补码

在计算机内部都是用二进制补码进行运算的,忽然脑子一抽,十进制能不能进行补码运算呢?


首先随便列出一个十进制的式子:

89-12=77

二进制的负数是通过取反再加一来获得补码的
二进制正数的原码=反码=补码

显然,89的补码为89
那么-12 的补码是多少呢?

  • 开始,我是想用10减去每一个数,毕竟它叫十进制数
  • 10去减每一个数,类比到二进制就是用2减去每一个数
  • 但是,这显然是行不通的,因为1111的反码是0000,0101的反码是1010
  • 那就只能用9

9减去12的每一位数得到:87

将上面随便写出的式子添加上符号位并写成补码的形式,将会得到:

0 89 + 9 (87 + 1) = (10) 77

结论: 十进制取反操作->9-x 所以,二进制的取反操作为:1-x .
不论是多少进制都有原码,反码,补码的概念,都能用补码进行运算 .
tips: 如果有人问-9的补码是多少,你得回答: (1 0111)2 .


两个负数相加

-78 - 66 = -144 
-078 - 066 = -144 // 位数不足,加一个最高位
9 (921 + 1) + 9 (933 + 1) = (19) 856 // 添上符号位,按位取反,写成补码形式
(19) 856 = (19) (143 + 1) // 将补码转换成原码,大功告成

为什么二进制的补码是反码加一,为什么十进制的补码也是反码加一?


这 有 什 么 意 义 呢 , 有 什 么 意 义 呢 ? \color{#FF7D00}{这有什么意义呢,有什么意义呢?} ,?

还记得当初你是怎么学会减法的吗? 现在告诉你, 你白学啦, 我们根本不需要学什么减法 . (当然, 这只是开玩笑)

或许对日常使用十进制,靠算数逻辑运算符+-来区分正负数的人类来说, 意义并不大 .
但对一个只懂01, 靠最高位是01来区分正负数, 加法做的很快,减法不行的家伙来说, 意义非凡
所以, 你是做加法快呢? 还是做减法快呢?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值