位运算
2017-04-21 Programming直接在二进制位上进行操作,主要用于程序的优化,加速。
- & :按位与(两个位都为1时,结果为1,否则为0)
- | :按位或(两个位都为0时,结果为0,否则为1)
- ^ :按位异或(两个位相同时,结果为0,否则为1)
- ~ :取反(一个位为0时,结果为1,否则为0)
- <<:左移(各个二进制位全部左移若干位,高位丢弃,低位补0)
- >>:右移(各个二进制位全部右移若干位,低位丢弃,高位之前为0则补0,否则补1)
- 判断奇偶。
if(num & 1)
//相当于if(num % 2 == 1)
if(!(num & 1))
//相当于if(num % 2 == 0) - 乘除2的幂。
num << n;
//相当于num * 2^n(2的n次方)
num >> n;
//相当于num / 2^n(2的n次方) - 交换两个数的值。
a = a ^ b;
b = a ^ b;
a = a ^ b;
- 正负转换。
num = ~ num + 1;
//相当于num = -num
num = (num ^ -1) + 1;
//相当于num = -num - 取余2的倍数。
result = num & (n - 1);
//相当于result = num % n(n为2的倍数) - 取绝对值。
x = (num ^ (num >> 31)) - (num >> 31);
//相当于x = num < 0 ? -num : num;
x = num ^ (~ (num >> 31) + 1)+(num >> 31);
//相当于x = num < 0 ? -num : num; - 判断两数符号是否相同。
if(a ^ b > 0);
//相当于if(a * b > 0) - 判断是否是2的正整数幂。
if((!(n & (n - 1)) ) && n == 1)
//是的话为真 - 求两个数平均值。
((x ^ y) >> 1) + (x & y);
//相当于(x + y) / 2 - 两个数最大最小值。
result = y ^ ((x ^ y) & -(x < y));
//x,y中的较小值
result = x ^ ((x ^ y) & -(x < y));
//x,y中的较大值