$b = 3;
$c = $a & $b;
echo $c; // 1
十进制3 转成二进制 0011
按手册说的 末了得出 0001, 0001 转成十进制数便是
按位异或 ^$a = 1;
$b = 2;
$c = $a ^ $b;
echo $c; //3
这里不是纯挚的相加关系
十进制1 转成二进制 0001
十进制2 转成二进制 0010
按位^ 末了得出 0011 //便是各个位数 不相同的都设为1
按位或 |$a = 1;
$b = 3;
$c = $a | $b;
echo $c; //3
十进制1 转成二进制 0001
十进制3 转成二进制 0011
按位| 末了得出 0011 ,十进制 表示 3
按位左移 <<$a = 1;
$b = 2;
$c = $a << $b;
echo $c ; //4
a << b就表示把a转为二进制后左移b位(在后面添b个0)。例如1的二进制为0001,而000100转成十进制是4,那么1 << 2 = 4。可以看出,a < b的值实际上便是a乘以2的b次方,由于在二进制数后添一个0就相称于该数乘以2。
常日认为a << 1比a 2更快,由于前者是更底层一些的操作。因此程序中乘以2的操作请只管即便用左移一位来代替。
按位右移 >>$a = 1;
$b = 2;
$c = $a >> $b;
echo $c; //0
和<<相似,a >> b表示二进制右移b位(去掉末b位),相称于a除以2的b次方(取整)