位运算
0,:异或算法:异域中同位如果值相同(都是0或者都是1)则为0,不同(一个是0,一个是1)为1。
(主要用来去除重复,很方便)
异或运算法则:
a ^ b = b ^ a
a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c
d = a ^ b ^ c 可以推出 a = d ^ b ^ c
a ^ b ^ a = b
了解了异或运算后回到那道算法题目,给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素.在不知道使用异或运算时,头都大了,现在我们可以这样:
int[] nums= {2,2,3,4,4};
for(int i = 1;i< nums.length;i++){
nums[0] = nums[0]^nums[i];
}
System.out.println(nums[0]);
上面的代码中nums[0]的值就是此数组中唯一出现的值,最后的结果我们只要通过异或运算的特点来得知,比如上面的数组[2,2,3,4,4],异或运算是满足交换规则的,对于2^2^3^4^4这样的异或运算,我们换一下位置等价得到(2^2)^(4^4)^3,通过两个相同的数进行异或运算可以得到0,那最终就会是0^0^3,最后会得到3.
1.与运算符
与运算符用符号“&”表示,其使用规律如下:
两个操作数中位都为1,结果才为1,否则结果为0
2.或运算符
或运算符用符号“|”表示,其运算规律如下:
两个位只要有一个为1,那么结果就是1,否则就为0,
3.非运算符
非运算符用符号“~”表示,其运算规律如下:
如果位为0,结果是1,如果位为1,结果是0,