开发者社区> 问答> 正文

十进制(6-9)怎样用补码进行二进制运算?

十进制(6-9)怎样用补码进行二进制运算?

展开
收起
知与谁同 2018-07-17 20:21:20 3335 0
3 条回答
写回答
取消 提交回答
  • 云栖社区聚能聊、问答管理员~发福利、搞怪,八卦我来,论技术、发话题、写博客你上!
      首先,介绍一下补码的编码规则:正数的补码等于原码,负数的补码是对其原码逐位取反,但符号位除外;然后整个数加1。
      对两个带符号数+6和+9进行减法运算
      +6的补码的字节表示是:0000 0110B //正数的补码等于原码
      +9的补码的字节表示是:0000 1001B //正数的补码等于原码
       0 0 0 0 0 1 1 0 B
      - 0 0 0 0 1 0 0 1 B
      _______________________
      (1)1 1 1 1 1 1 0 1 //产生借位
      因为运算结果为一个字节数据(8个二进制位),最高位产生的借位丢失。即最左边的1(括号括起来的那个1)不要它 最后得 1111 1101
      由于是补码运算,所以结果也是补码
      将补码变成原码 逆过程哦 因为最高位是1,表示负,所以整个数减1 得 1111 1100 除了符号位 取反 1000 0011 因为1000 0011等于-3
      且6-9 = -3 所以运算结果是正确的
    2019-07-17 22:57:53
    赞同 展开评论 打赏
  • TA有点害羞,没有介绍自己...
    数据在内存中以补码形式存储,运算也以补码形式运算,运算结果也是补码。

    最高位是符号位,正数时是0,负数时是1.以int类型2字节,16位二进制来算。

    6(正数),补码=原码,即 00000110
    -9(负数),原码 = 10001001 补码=11110111

    相加如下(缝2进1,结果写0):
    ------ 0000110
    --加--11110111
    --------------------------
    --得-- 11111101

    所以结果是 11111101 ,化为原码,因为最高位是1,代表负数,所以原码为 10000011转化成十进制就是 -3
    2019-07-17 22:57:52
    赞同 展开评论 打赏
  • 杀人者,打虎武松也。
    正数减一个数等于加这个数的补码
    6(D)=0 0110(B);9=1 1001(B)
    1 1001(B)补码=1 0111(B)
    所以表示方法为0 0110+1 0111=1 1101
    则原码为1 0010+0 0001=1 0011(B),结果即-3
    2019-07-17 22:57:52
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

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