算法前置基础知识
位运算相关
对于有符号的的而言:
- 二进制的最高位是符号位(0正1负)
- 正数的原码反码补码都一样
- 负数的反码 = 它的原码符号位不变,其他位取反
- 负数的补码 = 它的反码 +1, 负数的反码 = 负数的补码 -1
- 0的反码补码都是0
- Java 没有无符号位,换言之Java的数据都是有符号的
- 在计算机运算的时候都是以补码的方式来运算的
- 查看运算结果时要看原码
位运算符
- & 按位与 同1为1,否则为0
- | 按位或 有1为1,否则为0
- ^ 按位异或 不同为1,相同为0
- ~ 按位取反
- >> 算术右移 低位溢出,符号位不变,用符号位补溢出的高位
- << 算术左移 符号位不变,低位不变
- >>> 逻辑右移(无符号位右移) 低位溢出,高位补零
随机数相关
// 生成随机数
Math.random() [0,1)
Math.random() * N [0,N)
(int) Math,random() *N [0,N-1)
(int) ((maxValue + 1) * Math.random()) - (int) (maxValue * Math.random()) [-N,N]