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
感谢您们的详细解答,我已经明白了,谢谢!!!!!
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
感谢您们的详细解答,我已经明白了,谢谢!!!!!
PHP的位运算
PHP 运算符 (Operators)
java的位操作运算符
java位运算
位操作运算符优先级
数值表示与位运算一点笔记
内存表示,位运算及字节序
JavaScript的四舍五入运算
紫微斗数的运算基础
紫微斗数的运算方法
紫微斗数的运算基础
运算符 的 重载
不“简单”的“简便运算”
不“简单”的“简便运算”
Delphi 的运算符列表
加减乘除运算符号的来源
BigDecimal带精度的运算
位运算技巧 大总结 - 探路者 - CSDN博客
内存表示,位运算及字节序 - *无名小卒* - CSDNBlog
8月编程语言排行榜:PHP仍然居于第四位 - PHP程序员站--PHP程序员之家 PHP新...
Matrix - 与 Java 共舞 - [算法]Java中的位运算优化:位域、位图棋盘..
适用于 php-5.2 的 php.ini 中文版
第四章 [ ]运算符的本质
自增自减运算的用法