原码反码与补码

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

  @Test
  public 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 0011
      1111 1001
	+
	---------------
	  1111 1100
注:运算结果直接以补码形式保存到计算机中
    补码的补码即原码,1111 1100 的原码为 1000 0100-4

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

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

参考:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值