Java基础:位运算

位运算

位运算是直接对二进制进行运算。

位运算符

运算符 运算 范例
<< 左移 4<<3 = 4*2^3 = 32
>> 右移 16>>3=16/2^3=2
>>> 无符号右移 16>>>3=16/2^3=2
& 与运算 6 & 3 = 2
或运算 6丨3=7
^ 异或运算 6^3=5
~ 反码 ~6 = -7

详解

基础概念

在 Java 中,一个 int 类型 占用 4 个字节,每个字节 8 位,所以一个 int 占用 32 位存储空间。

左移

左移是指将16的32位二进制表示,向左移 2 位,即舍弃前面 2 位,后面空缺的 2 位,补0

image_1bkgkhfuf1u1q1ovu1ter2q11nsi9.png-11.5kB

右移

右移是指将16的32位二进制表示,向右移 2 位,即舍弃最后 2 位,最高位空缺的 2 位,根据原有数据最高位的值而定。一般整数为0,负数为1

图略.

无符号右移

基础运算跟右移一样,不过最高位空缺的两位,无条件全部补0.

图略.

与运算

是指将其运算数的二进制每一位都进行与运算,二进制中 0&0=0,0&1=0,1&1=1
image_1bkgl1d0j1ip07u118mf1ngrh6hm.png-9.4kB

或运算

是指将其运算数的二进制每一位都进行或运算,二进制中 0|0=0,0|1=1,1|1=1
image_1bkglccl71h021kpp1l6n1fnc1ivl13.png-7.2kB

异或运算

是指将其运算数的二进制每一位都进行异或运算,如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。二进制中 0^0=0,0^1=1,1^1=0

异或可以用作加密用途,一个数异或同一个数2次,结果还是那个数,如:7 ^ 4 ^ 4 = 7

反码

正数的补码就是该数取反后+1,如 ~6=-7 ~5=-6