java二进制知识_java二进制问题,一定要弄懂。。。。。

那篇博客-5的取反是4是正确地讲解,但是2的取反是-3的讲解是错误的(假如还有其他规则我不知道)

这是按位取反的实例package test3;

public class Test {

public static void main(String args[]) throws Exception {

System.out.println(~2);// -3

System.out.println(~(-5));// 4

}

}

这是为什么,为什么2取反是-3?

2在计算机中的补码是    0000 0000 0000 0010

取反:                           1111 1111 1111 1101(这一步是计算机进行的操作即~2)

在计算机中所有的数据都是补码表示的,当然你取反,计算机还是认为你是补码(1111 1111 1111 1101是补码)

1111 1111 1111 1101转成成原码(如果你想要知道1111 1111 1111 1101在计算机中到底表示的是什么(这个操作计算机是不会执行的,它只是我们想要知道1111 1111 1111 1101到底表示的是什么,所以才进行的转换):

补码:1111 1111 1111 1101

取反: 1000 0000 0000 0010

加一:  1000 0000 0000 0011

所以结果是-3(补码转源码,符号位不动,其他位取反之后加一)

现在分析-5,首先必须得到-5在计算中是怎么表示的(以下):

原码: 0000 0000 0000 0101

反码: 1111 1111 1111 1010

加一:  1111 1111 1111 1011(这就是计算机中表示的)

-5的取法是对1111 1111 1111 1011(计算机保存的-5二进制表示)进行取反,结果

0000 0000 0000 0100(计算机进行的操作)

0000 0000 0000 0100是什么?我们需要转吗?不需要,这就是4

原码补码互转的规则

正数的原码反码补码一样

负数源码转补码: 负数绝对值的源码的反码加一

负数的补码转源码:符号位不动其他位取反之后加一

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值