理解 Java 运算符
您目前处于:  2019-12-24

位运算

long 为64位整数类型(8个字节),分为高位和低位,前32位(4个字节)是高位,后32位(4个字节)是低位。

1byte = 8bit

a 右移32位,实际上是指,就是获得了 a 的前四位的值。

使用 0x 代表前边有多个0,具体有几个0这样解释: 比如这里使用的是 0xffffffffL,这里表示前边有8个零。

一个 f 代表4位;两个 f 代表8位,代表一个字节;ffffffff 表示4个字节。

long 类型,一共是8个字节,8个 ff 代表4个字节,那剩余的前四个字节,就是用 0x 来表示,所以这里一共有8个零。

用 a 与 0xffffffffL& 运算,如果 a 中的位数是0的话,还的0,是1的话,这里参考 & 运算。

long a = 123456789012345678L;

long a1 = a >> 32;
long a2 = a & 0xffffffffL;

System.out.println(a);
System.out.println("高位=" + a1 + ",低位=" + a2);

将原来的移到地位的数据,在左移32位,到高位,加上原来的低位,就可以得到原始值了。

long b1 = a1 << 32;
long b2 = b1 + a2;

System.out.println(b2);

a1 << 32 等价于 a1*2^32,注意其中的规律,2的2进制是10、4的是100、8的是1000、16的是10000 … 所以左移几位就是把二进制向左移动几位,空位补齐0而已。

以上代码运行结果:

123456789012345678
高位=28744523,低位=2788225870
123456789012345678

按位与运算

运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;,即:两位同时为“1”,结果才为“1”,否则为0。

|= 运算符

x |= y 等效于 x = x | y

Reference

https://www.iteye.com/blog/younglibin-1920576

https://blog.csdn.net/qq_36459257/article/details/80257267


转载请并标注: “本文转载自 linkedkeeper.com (文/张松然)”  ©著作权归作者所有