开发者社区> 问答> 正文

二进制加减法运算法则

二进制加减法运算法则

展开
收起
知与谁同 2018-07-16 16:53:30 8934 0
2 条回答
写回答
取消 提交回答
  • 云栖社区聚能聊、问答管理员~发福利、搞怪,八卦我来,论技术、发话题、写博客你上!
    1.二进制加法运算法则:
    0+0=0,0+1=1,1+0=1,1+1=10 ,也就是当两个相加的二进制位仅一位为1时,相加的结果为1;如果两个二进制位全是0,相加的结果仍为0;而如果两个相加的二进制位均为1,则结果为10(相当于十进制中的2),也就是“逢2进1”规则,与十进制中的“逢10进1”的道理一样。
    2.二进制减法运算法则:
    1-1=0,1-0=1,0-0=0,0-1=-1,也就是当两个相加的二进制位中同为0或1时,相减的结果为0;如果被减数的二进制位为1,而减数的二进制位为0,则相减的结果仍为1;而如果被减数的二进制位为0,而减数的二进制位为1,则需要向高位借1,但此时是借1当2,与十进制中的借1当10道理一样。

    -------------------------

    。。。

    2019-07-17 22:57:37
    赞同 展开评论 打赏
  • 减法运算其实是可以由加法运算替代的,我们上面已经介绍过了无符号和补码的非,其实很多CPU是没有减法运算器的,它们都是将减数进行逆运算以后送入加法器,然后进行加法运算,这样得出来的结果就是减法运算最终的结果。

    比如我们考虑一种简单的情况,当w = 4时的无符号减法运算,对于 5 - 4这个减法运算来说,我们可以由 5 + 4-1(其中4-1是4的逆元的意思,不是1/4的意思)来替代这个减法运算。

    为了更加直观,LZ带各位来算一下,首先4的逆元根据上面的公式可以得到为 4-1 = 24 - 4 = 12 。那么我们现在需要对5和12进行加法运算,它们的位表示分别为 0101和1100,结果为10001,也就是十进制17的位表示。不过由于我们的w = 4,因此截断之后结果为0001,也就是十进制的1。最终可以得到 5 - 4 = 1。

    对于5 - 4来说,是考虑的结果为正的情况。或许有的猿友会对结果为负或者说是无符号数溢出的情况下有疑问,因此LZ这里对这种情况也做一个简单的介绍。我们考虑一个简单的计算 0 - 1,我们可以得到1-1 = 24 - 1 = 15。此时对0和15进行加法运算,他们的位表示分别为0000和1111,结果为1111。

    看到这里估计有的猿友会奇怪了,这怎么回事,0 - 1 = 15。

    当然不是,这个结果其实是正确的。考虑使用补码编码来解析1111这个位表示,它代表的值就是-1。15是1111这个位表示在无符号编码情况下的解析结果。

    因此LZ这里也给出一个公式,就是对于两个整数x和y来说,x - y = x + y-1。这里需要特别说明的是,这个公式代表的意义是位表示,而不是实际的数值。

    2019-07-17 22:57:37
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载