是计算机的逻辑异或运算
相同为0, 不同为1
1000 ^ 1001 的运算过程如下
1001
1000
=0001
通过判断两个数异或结果是否为0来判断两个数是否相等
int a=10,b=20,c=10;
a^b 不是0, 所以不相等
a^c 是0, 所以相等
int a = 10;
int b = 20;
a = a^b;
System.out.println("a = " + a);
b = a^b;
System.out.println("b = " + b);//10
a = a^b;
System.out.println("a = " + a);//20
a = a ^ a;
System.out.println("a = " + a); //0
1010 最右侧1是0010
1100 最有测1是0100
一个二进制数减1, 相当于把这个数的从最右侧的1开始flio翻转
1000 – 0001 = 0111
0100 – 0001 = 0011
1100 – 0001 = 1011
x ^ (x & (x - 1))
// x-1 是为了找出最右侧1的位置,
// x & (x - 1) 是将从右侧的位置开始的位置为0
// ^ 是根据相同为0, 不同为1, 最右侧之前的位置为0
// java8的hashMap的hash
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
//h >>> 16 是为了将高位移向地位
//异或运算 是因为index = (n-1) & hash; n是数组的长度, 为了防止hash散列冲突
//java7的是hash % n, java8用无符号右移是因为位运算快
https://hackernoon.com/xor-the-magical-bit-wise-operator-24d3012ed821
https://cloud.tencent.com/developer/article/1373928
喜欢我的文章, 请点赞!!! 喜欢我的文章, 请点赞!!! 喜欢我的文章, 请点赞!!!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。