1.按位与(&):将数字转换成二进制。后进行与操作。将其位数对齐。若相同位都为1。则为1。反之为0;例子:
$a = 5; 0101; $a = 35; 10 0011;
$b = 9 ; 1001; $b = 23; 01 0111;
$a & $b = 0001;十进制为1 $a & $b = 00 0011; 十进制为3
2.按位或(|):将数字转换成二进制。后进行或操作。将其位数对齐。若相同位都不为1.则为0。反之为1;例子:
$a = 5; 0101; $a = 35; 10 0011;
$b = 9 ; 1001; $b = 23; 01 0111;
$a | $b = 1101;十进制为13 $a | $b = 110111; 十进制为55
3.按位非(~):首先明确一点。计算机只认识补码。正数补码原码一致。负数的补码等于反码加一。~为取反(1变0,0变一);
以负5为例:
正数5(32位): 00000000 00000000 00000000 00000101
反码 : 11111111 11111111 11111111 11111010
-5补码: 11111111 11111111 11111111 11111011
正数5(32位): 00000000 00000000 00000000 00000101
反码: 11111111 11111111 11111111 11111010
5的补码: 00000000 00000000 00000000 00000101
例子:$a = 5; $c = ~$a;
5的补码进行~(得到负数的补码) 111111111111111111111111111111010
负数补码还原到反码 (-1): 111111111111111111111111111111001
获得负数原码: 000000000000000000000000000000110
输出: 6 错。 正数~ 为负数; 所以是-6;
下面以-5为例子: -5补码 11111111 11111111 11111111 11111011
~ 00000000 00000000 00000000 00000100
反码 11111111 11111111 11111111 11111011
原码 00000000 00000000 00000000 00000100
输出 : 4