参考
逻辑位运算符
位与 &
// 规则:
1 & 1; // 1
1 & 0; // 0
0 & 1; // 0
0 & 0; // 0
// 示例:
// 12 = 00000000 00000000 00000000 00001100
// 5 = 00000000 00000000 00000000 00000101
// ret = 00000000 00000000 00000000 00000100 = 4
12 & 5; // 4
位或 |
// 规则:
1 | 1; // 1
1 | 0; // 1
0 | 1; // 1
0 | 0; // 0
// 示例:
// 12 = 00000000 00000000 00000000 00001100
// 5 = 00000000 00000000 00000000 00000101
// ret = 00000000 00000000 00000000 00001101 = 13
12 | 5; // 13
位异或 ^
// 规则:
1 ^ 1; // 0
1 ^ 0; // 1
0 ^ 1; // 1
0 ^ 0; // 0
// 示例:
// 12 = 00000000 00000000 00000000 00001100
// 5 = 00000000 00000000 00000000 00000101
// ret = 00000000 00000000 00000000 00001001 = 9
12 ^ 5; // 9
位非 ~
// 规则:
~0; // 1
~1; // 0
// 示例:
// 12 = 00000000 00000000 00000000 00001100
// ret = 11111111 11111111 11111111 11110011 = -13
~12; // -13
移位运算符
零填充左位移 <<
// 规则:
// 指定个0数位从右被推入,最左侧的数位被移除
// 示例1:
// 5 = 00000000 00000000 00000000 00000101
// ret = 00000000 00000000 00000000 00001010 = 10
5 << 1; // 10
// 示例2:
// -12 = 11111111 11111111 11111111 11110100
// ret = 11111111 11111111 11111111 11101000 = -24
-12 << 1; // -24
// 示例3:
// 1073741824 = 01000000 00000000 00000000 00000000
// ret = 10000000 00000000 00000000 00000000 = -2147483648
1073741824 << 1; // -2147483648
// 示例4:
// 2147483647 = 01111111 11111111 11111111 11111111
// ret = 11111111 11111111 11111111 11111110 = -2
2147483647 << 1; // -2
零填充右位移 >>>
// 规则:
// 指定个0数位从左被推入,最右侧的数位被移除
// 示例1:
// 5 = 00000000 00000000 00000000 00000101
// ret = 00000000 00000000 00000000 00000010 = 2
5 >>> 1; // 2
// 示例2:
// -12 = 11111111 11111111 11111111 11110100
// ret = 01111111 11111111 11111111 11111010 = 2147483642
-12 >>> 1; // 2147483642
// 示例3:
// 2147483647 = 01111111 11111111 11111111 11111111
// ret = 00111111 11111111 11111111 11111111 = 1073741823
2147483647 >>> 1; // 1073741823
有符号右位移 >>
// 规则:
// 指定个0数位从左被推入,最右侧的数位被移除,
// 最后用原符号位填充最左侧的数位
// 示例1:
// 5 = 00000000 00000000 00000000 00000101
// mid = 00000000 00000000 00000000 00000101
// ret = 00000000 00000000 00000000 00000010 = 2
5 >> 1; // 2
// 示例2:
// -12 = 11111111 11111111 11111111 11110100
// mid = 01111111 11111111 11111111 11110100
// ret = 11111111 11111111 11111111 11111010 = -6
-12 >> 1; // -6
// 示例3:
// 2147483647 = 01111111 11111111 11111111 11111111
// mid = 00111111 11111111 11111111 11111111
// ret = 00111111 11111111 11111111 11111111 = 1073741823
2147483647 >> 1; // 1073741823
// 示例4:
// -2147483647 = 10000000 00000000 00000000 00000001
// mid = 01000000 00000000 00000000 00000000
// ret = 11000000 00000000 00000000 00000000 = -1073741824
-2147483647 >> 1; // 1073741823