算法前置基础知识

位运算相关

对于有符号的的而言:

  • 二进制的最高位是符号位(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]

posted @ 2022-10-10 12:29  浮沉丶随心  阅读(38)  评论(0编辑  收藏  举报