概述
在Java语言中,二进制使用补码表示,最高位是符号位,正数为0,负数为1。
其中:
- 正数的最高位是0,其余各位代表数值本身
- 负数的最高位是1,通过该数绝对值的补码按位取反,再对整个数加1
Java中的位移操作,只对int类型的数据生效(对byte,short,char,long的支持是转换成int后生效)。
一个int是4个字节,一个字节8位,总共32位。
在日常的开发中,位运算使用的不多,但是合理的使用,会使得代码大大简化。
比如在判断状态是0还是1时,在和0和1之间相互切换,可以直接使用原始值进行异或操作 1^n。
Java支持的位运算符主要包括:
- |或
- &且
- ~非
- ^异或
- <<左移
- >>右移
- >>>无符号右移
| 按位或
只要有1个为1,值就为1
// 7 的二进制: 0000 0111
// 9 的二进制: 0000 1001
// |
有一个为1,值就为1
0000 1111
System.out.println(7|9);
& 按位且
同时为1,才是1
// 7 的二进制: 0000 0111
// 9 的二进制: 0000 1001
// &
同时为1,才是1
0000 0001
System.out.println(7&9);
~ 按位非
1变为0,0变为1
// 7 的二进制:
0000 0000 0000 0000 0000 0000 0000 0111
// ~
0变1,1变0 1111 1111 1111 1111 1111 1111 1111 1000
System.out.println(~7);
^ 按位异或
相同为0,不同为1
// 7 的二进制: 0000 0111
// 9 的二进制: 0000 1001
// ^
相同则为0,不同为1
0000 1110
System.out.println(7^9);
<< 按位左移
左移,右侧补0
// 7 的二进制: 0000 0111
// 9 的二进制: 0000 1001
// <<
左移2位,右侧补0
0010 0100
System.out.println(9<<2);
>> 按位右移
右移,如果是正数,左侧补0;如果是负数,左侧补1
// 9 的二进制: 0000 1001
// >>
右移2位,9为正数,高位全部补0
0000 0010
System.out.println(9>>2);
// -9 的二进制: 1111 1111 1111 1111 1111 1111 1111 0111
// >>
右移2位,-9为负数,高位全部补1
1111 1111 1111 1111 1111 1111 1111 1101
System.out.println(-9>>2);
>>> 无符号右移
和右移的区别在于,符号位也跟着右移。
// -1 表示 1111 1111 1111 1111 1111 1111 1111 1111
System.out.println(-1>>1);
System.out.println(-1>>>1);
System.out.println(-1>>>2);
System.out.println(-1>>>3);
运行结果是:
-1
2147483647
1073741823
536870911
最后
以上就是朴实灰狼为你收集整理的Java 位运算总结的全部内容,希望文章能够帮你解决Java 位运算总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复