按位与运算符 "&" 是双目运算符. 其功能是参与运算的两数各对应的二进位相与. 只有对应的两个二进位均为 1 时, 结果位才为 1, 否则为 0. 参与运算的数以补码方式出现.
例如: 9&5 可写算式如下:
- 00001001 (9 的二进制补码)
- &00000101 (5 的二进制补码)
- 00000001 (1 的二进制补码)
- <?php
- $a = 9;
- $b = 5;
- echo sprintf("%b", $a&$b);
- ?>
"|" 按位 "或" 运算
按位或运算符 "|" 是双目运算符. 其功能是参与运算的两数各对应的二进位相或. 只要对应的二个二进位有一个为 1 时, 结果位就为 1. 参与运算的两个数均以补码出现.
例如: 9|5 可写算式如下:
- 00001001
- |00000101
00001101 (十进制为 13) 可见 9|5=13
- <?php
- $a = 9;
- $b = 5;
- echo sprintf("%b", $a|$b)."n"; // 二进制
- echo sprintf("%d", $a|$b)."n"; // 十进制
"^" 按位 "异或" 运算
按位异或运算符 "^" 是双目运算符. 其功能是参与运算的两数各对应的二进位相异或, 当两对应的二进位相异时, 结果为 1. 参与运算数仍以补码出现, 例如 9^5 可写成算式如下:
- 00001001
- ^00000101
- 00001100 (十进制为 12)
- <?php
- $a = 9;
- $b = 5;
- echo sprintf("%b", $a^$b)."n"; // 二进制
- echo sprintf("%d", $a^$b)."n"; // 十进制
"~" 求 "反" 运算
求反运算符~为单目运算符, 具有右结合性. 其功能是对参与运算的数的各二进位按位求反.
例如~9 的运算为:
~(0000000000001001) 结果为: 1111111111110110
- <?php
- $a = 9;
- $b = 5;
- echo sprintf("%b", ~$a)."n"; // 二进制
"" 左移运算
左移运算符 "<<" 是双目运算符. 其功能把 "<<" 左边的运算数的各二进位全部左移若干位, 由 "<<" 右边的数指定移动的位数, 高位丢弃, 低位补 0.
例如:
a<<4
指把 a 的各二进位向左移动 4 位. 如 a=00000011(十进制 3), 左移 4 位后为 00110000(十进制 48).
- <?php
- $a = 3;
- $temp = $a<<4;
- echo sprintf("%d", $temp)."n"; // 十进制
">>" 右移运算
右移运算符 ">>" 是双目运算符. 其功能是把 ">>" 左边的运算数的各二进位全部右移若干位,">>" 右边的数指定移动的位数.
例如:
设 a=48,
a>>4
表示把 00110000 右移为 00000011(十进制 3).
应该说明的是, 对于有符号数, 在右移时, 符号位将随同移动. 当为正数时, 最高位补 0, 而为负数时, 符号位为 1, 最高位是
来源: http://www.taocms.org/339.html