• 注册
当前位置:1313e > 默认分类 >正文

原码反码与补码

在计算机系统中,数值一律用补码来存储

  @Testpublic void toBinaryString() {System.out.println( -1 + " <=> " + Integer.toBinaryString(-1) + " <=> " + 0b11111111111111111111111111111111);}
//执行结果
-1 <=> 11111111111111111111111111111111 <=> -1

二进制反码、补码计算方式

  • 对于正数,其二进制原码、反码、补码均为相同的,为原码的形式。
  • 对于负数:
    – 反码:符号位不变,其余各个位取反(1变0,0变1)
    – 补码:反码 +1
    – 符号位:最高位(最左边)表示符号位,其中1表示负,0表示正
    示例:
此处用8个数位来运算,首位是符号位,0表示正,1表示负
求 -5  的补码
原码:1000 0101
反码:1111 1010
补码:1111 1011

减法运算转换成加法运算:

a - b = a + (-b) 示例 :

二进制减法示例: 
3 - 7  = 3 + (-7) 
此处用8个数位来运算,首位是符号位,0表示正,1表示负
3-7 原、反、补码如下:
原0000 0011   1000 01110000 0011   1111 10000000 0011   1111 1001补码求和: 0000 00111111 1001+---------------1111 1100
注:运算结果直接以补码形式保存到计算机中补码的补码即原码,1111 1100 的原码为 1000 0100-4

两数相减,可转换为补码求和,推广到N进制,这里以10进制为例:

56 - 12 = 56 + (-12)
此处用4个数位来运算,首位是符号位,0表示正,9表示负
56-12 的原、反、补码如下:
原0056   90120056   99870056   9988
补码求和:00569988+-------------------------------100440044  最左边的1溢出,得到结果 0044

参考:

  • 原码、反码、补码
  • 计算机内存数值存储方式
  • 二进制和补码的换算
  • 有符号类型的最小负数的补码的由来

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 162202241@qq.com 举报,一经查实,本站将立刻删除。

最新评论

欢迎您发表评论:

请登录之后再进行评论

登录