今天的博客是关于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两个数,他们取反之后就是对方!
这一节关于运算符的知识,暂时就这么多啦,搞起!继续奔赴下一章节!!