JavaSE--运算符--源码反码补码

       

        今天的博客是关于JavaSE的运算符的心得总结,这一章节较为简单,整体的话我用了一张思维导图来总结我的知识点,如果有需要的小伙伴点击下方链接去下载,最后希望大家一起进步,蟹蟹~

本节学习目标:

  • <1>按位取反
  • <2>按位异或


前言

本章节总体知识点我用下方链接的思维导图总结:

如果有Gitmind的小伙伴点击这里:

链接:https://gitmind.cn/app/doc/5142400323
密码:2459

百度网盘的在这里:

链接:https://pan.baidu.com/s/1sj_3w8zligtXDQ8BXtGfgA 
提取码:0916 

提示:以下是本篇文章正文内容,下面案例可供参考


一丶按位取反

符号:~,含义:如果该位为 0 则转为 1, 如果该位为 1 则转为 0

这里的按位取反,是指按照二进制来取反,也就是对二进制位的每一位取反,但是这里有一个需要注意的点,看下方举例:

那么就很奇怪呀!

 这是因为整形数字在计算机的储存当中都是用补码的形式来进行存储,什么意思?

原码:第一位是符号位,其余位置表示大小

反码:符号位置不变,其余位置取反

补码:反码加一

在这里,需要注意几点:

<1>正数的源丶反丶补码都是它自身

<2>负数才有原丶反丶补码

那么,这样就好理解多了,如果计算机储存的是补码,那么这里的取反其实是对补码取反,也就是得到了取反之后数字的补码形式,如果想要源码也就是表现形式,那么先要对其减一变成反码,然后符号位不变其余位置取反变成原码,具体操作如下:

10的源码  0x0000 0000 0000 0000 0000 0000 0000 1010
这里正数的原码反码补码是一码事
取反的话对补码取反: 0x1111 1111 1111 1111 1111 1111 1111 0101  【这里特别说一下,就是它取反之后是补码!!】
这是补码的形式,然后减一得到反码 Ox1111 1111 1111 1111 1111 1111 1111 0100
再得到源码  Ox1000 0000 0000 0000 0000 0000 0000 1011   最后这里是-11 

那么具体是不是我们想的这样?

 就是这样铁子!!

二丶按位异或

符号:^,含义:如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1.

具体操作看如下代码:

int a = 0x1;
int b = 0x2;
System.out.printf("%x\n",a^b); //很明显这里异或的答案是 1

那么这么也有一个重点说明,就是有一个特殊的地方:

 可能大家会很疑惑,a^c能理解,是0。但是 a^b为什么是-1??这样子看不太好看,我们换成二进制来表现

b:0x0101 0101 0101 0101 0101 0101 0101 0101  所有奇数比特位上的全是1
a:0x1010 1010 1010 1010 1010 1010 1010 1010   所有偶数比特位上全是1
异或之后就是:
0x1111 1111 1111 1111 1111 1111 1111 1111  这里是补码的形式
0x1111 1111 1111 1111 1111 1111 1111 1110  这是反码
0x1000 0000 0000 0000 0000 0000 0000 0001  这是源码

所以大家明白了嘛?0xAAAAAAAA和0x55555555两个数,他们取反之后就是对方!

 这一节关于运算符的知识,暂时就这么多啦,搞起!继续奔赴下一章节!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值