基本知识
程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑
运算符
,但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理)【摘自百度百科】
位与运算(&) 相同位的两个数字都为1,则为1;若有一个不为1,则为0
位或运算(|) 相同位只要一个为1即为1
位异或(^) 相同位不同则为1,相同则为0
位反运算(~) 相同位1则为0,0则为1
用法
1.判断一个整数是奇数还是偶数
可以使用位与运算的特性,奇数的二进制表示方法最后一个数必定是1 ,偶数的二进制表示方法最后一个数必定是0,
这时可以和1进行与运算,如果结果是1,则表示是奇数,如果结果是0,则表示是偶数。
function test($num){
if($num<0) return 0;
if($num & 1){
return 0;
}else{
return 1;
}
}
2.判断一个整数是否是2的整数次幂
也是使用位与运算的特性,如果该数是2的整数次幂,那么这个数的二进制表示形式为 0010000... 那么这个数减一之后的数的二进制
0001111...
这两个数与运算如果结果是0则表示是整数次幂,否则不是。
function test($n){
if($n<2) return 0;
$res = $n & ($n-1);
if($res==0){
return 1;
}else{
return 0;
}
}