Java中的位运算
在开发中,分析源码时经常会碰到关于位运算的计算,有时总是搞混每个位标志的含义,每次都要重新查找。因此,我将常见的几个运算符进行下述总结:
声明:该随笔仅作为自己平常的笔记所用,若想查看Java运算符详细介绍的请移步文章末尾链接3.
一、常见的位运算符:
1、需要注意的是:以下针对的都是值转换为二进制后的规则。
&:都为1,才为1,否则为0
|:两个位只要有一个为1,那么结果就是1,否则就为0
~:如果位为0,结果是1,如果位为1,结果是0
^:两个操作数中,相同则结果为0,不同则结果为1---异或
例如:
int result = 6&5; ----->
6---> 0110
5---> 0101
因此,6&5值为0100--->4
result = 4;
2、关于异或运算:(^)
异或运算中,如果某个字符(或数值)x 与 一个数值m 进行异或运算得到y,则再用y 与 m 进行异或运算就可以还原为 x ,因此应用这个原理可以实现数据的加密解密功能。
(1)使用场景:
- 按照上述特性,可实现两个变量的互换,而不借助第三个变量。
- 数据的简单加密解密。
(2)实现a、b互换,可作如下操作:
newa = a^(a^b) //newa与b的值相同
newb = b^(a^b) //newb与a的值相同
二、移位运算符:
>>>= :无符号右移. 右移赋值,最高位补0
<<= : 左移赋值
UL:无符号长整型
>>>:无符号右移,针对无符号数(非负数)两者并无区别。
>>:右移
关于无符号的移位运算,仅包括右移,而没有左移(即<<<)
三、其他推荐:
1、原码、反码、补码详解:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html
2、Java中无符号类型的简写及详细介绍:https://blog.csdn.net/langzi7758521/article/details/51853298
3、最近发现的,挺详细的Java运算符:http://tryenough.com/java-operator