// 1.位或运算 两个二进制对应位 同时为0时,则为0,否则为1;
int a = 5; //0000 0101
int b = 3; //0000 0011
//a = a|b; 0000 0111
a |= b; // 0000 0111 表示 10进制 7
// 2.位与运算 两个二进制对应位 同时为1,则为1,否则为0
int c = 5; //0000 0101
int d = 3; //0000 0011
//c = c&d; 0000 0001
c &= d; // 0000 0001 表示 10进制 1
// 3.位异或运算 两个二进制对应位 相同时为0,否则为1
int e = 5; //0000 0101
int f = 3; //0000 0011
//e = e^f 0000 0110
e ^= f; // 0000 0110 表示 10进制 6
-
java 使用位运算 (&) 代替 取模运算(%)
a % b = a & (b-1) 前提是 b 为 2^n
公式:
X % 2^n
= X & (2^n - 1)
一个数对2^n 取模 相当于一个数和(2 ^ n - 1)做按位与运算 -
位右移位 >> :
X/8 = X / 2^3 = X>>3 (把x右移位3位,此时得到的是 x / 8 的商,而被移掉的部分(后三位),则是 x % 8 ,也就是余数) .
对于所有的 2^n 的数,二进制表示为
1000…00 : 1 后面 n 个 0;
对于所有的 2^n - 1 的数,二进制表示为
0111…11 : 0 后面 n 个 1;
X / 2 ^ n 就是 X >> n ; X % 2 ^ n 就是 X & (2 ^ n - 1) -
位左移位 << :
X * 2 ^ n 就是 X << n