位运算
程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理)。
110
AND 1011
---------------
0010 --> 2
|
含义
|
Pascal语言
|
C语言
|
Java
|
Php
|
|---|---|---|---|---|
|
按位与
|
a and b
|
a & b
|
a & b
|
a & b
|
|
a or b
|
a | b
|
a | b
|
a | b
|
|
|
按位异或
|
a xor b
|
a ^ b
|
a ^ b
|
a ^ b
|
|
按位取反
|
not a
|
~a
|
~a
|
~a
|
|
左移
|
a shl b
|
a <<b
|
a <<b
|
a << b
|
|
带符号右移
|
a shr b
|
a >> b
|
a >> b
|
a >> b
|
|
无符号右移
|
/
|
/
|
a>>> b
|
/
|
——来自百度百科
其常见应用如下
- 平均值
(x+y)>>1 表示x加y的和除以2的1次方,即>>n右移n位,实际含义相当于/2^n - 2的n次方
1 << n 左移与右移相反,表示乘以2的n次方 - 判断符号是否相同
(x^y)>=0 - 交换两个数
a ^= b;
b ^= a;
a ^= b; - 判断奇偶性
(n &1) ==1 0表示该数为偶数,1表示该数为奇数 - 取绝对值
(n ^ (n >> 31)) - (n >> 31) - 判断n是否是2的整数次幂
n&(n-1) == 0
至于为什么可以这么判断,见百度百科。

浙公网安备 33010602011771号