- 在一个语句中,如果 i 被用到多次的话,i++ 会从左到右进行计算,并取其计算结果使用。
- 在一个语句中,多种变量「i, j, k」分别执行 x++ 操作时,每种变量互不影响;单种变量自身互相影响,看前一条
- 就算是在表达式中,也是先计算等号左边,再计算等号右边
- 正数的原码、反码、补码都一样
- 负数的反码 = 原码的符号位不变,其他位取反
- 负数的补码 = 反码+1
- 0的原码、反码、补码都是0
- 计算机以补码进行运算
- 加法运算中,符号位参与运算
- 参考文章:https://zhuanlan.zhihu.com/p/74022696
| 数字 |
源码 |
补码 |
|
| 0 |
0000 |
0000 |
- |
| 1 |
0001 |
0001 |
- |
| -1 |
1001 |
1111 |
- |
| 1 - 1 = 0 |
- |
0001 + 1111 = 0000 |
- |
| 操作 |
符号 |
示例 |
备注 |
| 判断奇偶 |
x % 2 —> x & 1 |
- |
- |
| 清零最低位的1 |
X = X & (X - 1) |
- |
- |
| 得到最低位的1,其余位置0 |
X & -X |
- |
- |
| 其他 |
x / 2 —> x >> 1 |
- |
- |
| - |
X & ~X == 0 |
- |
- |
| 操作 |
符号 |
示例 |
备注 |
| 左移 |
000011 << 3 = 011000 |
1 << 3 == 8; 3 << 3 == 24 |
- |
| 右移,补符号位 |
01111 >> 2 = 00011 |
15 >> 2 == 3; Integer.MIN_VALUE >> 31 == -1 |
- |
| - |
11111 >> 2 = 11111 |
-1 >> 2 == -1 |
- |
| 无符号右移 |
1111 >>> 2 = 0011 |
-1 >>> 30 == 3 |
- |
| - |
11...111 >>> 30 = 00...011 |
-1 >>> 30 == 3 |
- |
| - |
1111 >>> 2 = 0011 |
-1 >>> 30 == 3 |
- |
| 异或 |
x ^ 0 == x |
12 ^ 0 == 12 |
- |
| 「~」取反运算符,按位取反 |
x ^ 1111 = ~x |
(15 ^ ~0) == ~15 |
- |
|
x ^ ~x == 1111 |
13 ^ ~13 == -1 |
- |
|
x ^ x == 0000 |
13 ^ 13 == 0 |
- |
| ---- |
---- |
---- |
---- |
| 将x最右边的n位清零 |
x & (~0 << n) |
15 & (~0 << 2) == 12 |
- |
| 获取x的第n位值 |
(x >> n) & 1 |
9 >> 3 & 1 == 1 |
- |
| 获取x的第n位的幂值 |
x & (1 << n) |
15 & 1 << 3 == 8 |
- |
| 仅将第n位置为1 |
x | (1 << n) |
8 | (1 << 2) == 12 |
- |
| 仅将第n位置为0 |
x & ~(1 << n) |
12 & ~(1 << 2) == 8 |
- |
| 将x最高位至第n位清零 |
x & ((1 << n) - 1) |
15 & ((1 << 2) - 1) == 3 |
- |
| 其他 |
~0 == -1 |
- |
- |
结构:一个很长的二进制向量,和一系列随机映射函数。
优势:
- 检索一个元素是否在一个集合中
- 空间效率和查询时间都远远超过一般的算法
- 判断存在时,只是大概率存在。

- 数据结构:HashMap + 双端链表
- 替换策略:最近最少使用原则,最近最少使用的排在后面。
- 时间复杂度:查询/修改:O(1)

- Java运算符及运算符的优先级
https://www.cnblogs.com/onepixel/p/7674659.html