PHP的位运算

来源:百度文库 编辑:神马文学网 时间:2024/03/29 10:38:36
位运算??? (http://club.21php.com/showthread.php?t=5386)
zww232004年06月19日 10:32 AM
位运算???
echo "位运算符的例子!
\n";
$a=5; //用二进制表示a=101;
$b=2; //用二进制表示b=010;
$c=$a&$b; //与运算
echo "a & b = ".$c." (101 & 010)
\n";
$c=$a|$b; //或运算
echo "a | b = ".$c." (101 | 010)
\n";
$c=~$a; //非运算〖〗
echo "~a = ".$c." (~101)
\n";
$c=$a^$b; //异或运算
echo "a ^ b = ".$c." (101 ^ 010)
\n";
$c=$a<<$b; //向左移位运算
echo "a << b = ".$c." (101 << 010)
\n";
$c=$a>>$b; //向右移位运算
echo "a >> b = ".$c." (101 >> 010)";
php?>
运算结果是
位运算符的例子!
a & b = 0 (101 & 010)
a | b = 7 (101 | 010)
~a = -6 (~101)
a ^ b = 7 (101 ^ 010)
a << b = 20 (101 << 010)
a >> b = 1 (101 >> 010)
我想知道~a = -6 (~101) ,a << b = 20 (101 << 010)和a >> b = 1 (101 >> 010)的运算结果是怎样得出来的?
Cplus2004年06月19日 07:41 PM
~0=-1;~1=-2......~5=-6 就这样记下吧
101<<010 表示把101右移010(2)位,于是就成了10100=20
101>>010 表示把101左移010(2)位,于是就成了1=1。
Sorehead2004年06月20日 05:12 PM
做位运算不能只孤立的将要运算的数字的位数加以考虑,而必须从PHP是如何保存整型的,从PHP保存整型的字长整体来考虑。举例:像上面的a和b之间的运算,就不能只拿前三位来计算,虽然他们用三位就可以表示了。
PHP 不支持无符号整数,其整型数的字长和平台有关,一般是采用32 位来表示。注意这里提供的信息:
采用32位表示,即表示即使是存储0,也是采用32位,其二进制形式是:
0000 0000 0000 0000 0000 0000 0000 0001
不支持无符号,即表示这32位的最高位为符号位,0表示整数,1表示负数。
因此,做a & b的运算是如下:
0000 0000 0000 0000 0000 0000 0000 0101
&
0000 0000 0000 0000 0000 0000 0000 0010
结果:
0000 0000 0000 0000 0000 0000 0000 0000
至于~a运算如下:
0000 0000 0000 0000 0000 0000 0000 0101
结果:
1111 1111 1111 1111 1111 1111 1111 1010
由于最高位为1,所以表示这是一个负数。负数的采用的编码方式和正数是不一样的,一般都采用补码的方式来存储负数,补码的计算方式就是反码加一。至于反码,就是全部位取反。
因此,1111 1111 1111 1111 1111 1111 1111 1010的反码就是:
0000 0000 0000 0000 0000 0000 0000 0101
做加一操作,得到:
0000 0000 0000 0000 0000 0000 0000 0110
最终结果就是-6。
zww232004年06月21日 02:29 PM
感谢您们的详细解答,我已经明白了,谢谢!!!!!