java 原码 补码,Java中的原码、反码和补码

1、实例

先来看个例子

public static void main(String[] args) {

System.out.println(~2);

}

~在Java中是按位取反的意思,2是整形占4字节,其二进制表示为:

0000 0000 0000 0000 0000 0000 0000 0010

按位取反后的结果为:

1111 1111 1111 1111 1111 1111 1111 1101

但是输出结果却是-3。

2、原码、反码、补码

Java中存储的是有符号的数,在计算机中有符号的数是以补码的形式存储的。

2.1、原码

原码的二进制表示:最高位是符号位(1表示负数,0表示整数),其余位表示值的大小。

1和-1的原码表示为

1000 0000 0000 0000 0000 0000 0000 0001 //-1的原码

0000 0000 0000 0000 0000 0000 0000 0001 //1的原码

2.2、反码

正数的反码是其本身

负数的反码:符号位不变,其余位按位取反。

-1的反码为

1111 1111 1111 1111 1111 1111 1111 1110

2.3、补码

正数的补码是其本身

负数的补码:在反码的基础上加1

-1的补码为

1111 1111 1111 1111 1111 1111 1111 1111

3、分析

回到最初的问题:2在计算机中是以补码的形式存储的,由于正数的补码是其本身,所以2的补码为

0000 0000 0000 0000 0000 0000 0000 0010

~2表示按位取反,则对2的补码进行按位取反,结果为

1111 1111 1111 1111 1111 1111 1111 1101

从取反后的补码可知是负数,而负数转二进制规律:

1、取负数的绝对值的原码;

2、计算原码的反码;

3、对反码加一,获取补码。

我们可以反推出该负数绝对值的原码:

1、对补码减一,获取反码:1111 1111 1111 1111 1111 1111 1111 1100

2、将其按位取反获取原码:0000 0000 0000 0000 0000 0000 0000 0011

3、可知这个原码表示的是正数3,所以~2等于-3。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值