首页 > 其他 > 详细

位运算

时间:2020-11-27 11:48:20      阅读:34      评论:0      收藏:0      [点我收藏+]

位运算含义

位运算符 描述 规则
<< 左移操作符 左移,高位丢弃,低位补0
>> 右移操作符 右移,正数高位补0,负数高位补1
>>> 无符号右移 右移,高位补0
| 位或 两个位都为0,结果才为0
& 位与 两个位都为1,结果才为1
~ 位非 0变1,1变0
^ 位异或 两个位相同为0,相异为1

位运算案例

判断奇偶数

(a & 1) == 0 代替 a % 2 == 0 来判断 a 是不是偶数。

取余

a 对 16 进行取余,那么就可以使用 a & 15

交换数据

order[i] ^= order[i+1];
order[i+1] ^= order[i];
order[i] ^= order[i+1];

判断一个数是否是2的幂次方

bool isPowerOfTwo(int n) {
  return (n > 0) && !(n & (n - 1));
}

扰动函数

static final int hash(Object key) {
  int h;
  // h ^ (h>>>16) 目的是让 hash 更分散
  return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}

// @h      hash  
// @length table.length
// 获得在数组中的位置,length 是2的幂次方,
// 那么 length - 1 二进制就是 01..1111
// 这样做的目的就是取 hash 后几位作为 index
static int indexFor(int h, int length) {
  return h & (length-1);
}

位运算

原文:https://www.cnblogs.com/aaro0n/p/14046150.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!