在遇到位运算时不要害怕那一场串的0和1,其实正因为他是0和1,所以他们比0~10单纯,坏事可没他们能干,所以他们都是很好相处的。而且当前的计算机系统都是二进制系统,他们简单,稳定,可靠。
二进制和十进制,八进制,十六进制的转换,详见另外一篇《不同进制数间的转换》。
下面是位运算符及其解释:
$a & $b And(按位与) 将把 $a 和 $b 中都为 1 的位才设为 1,其他的的设为0.
$a | $b Or(按位同或) 将把 $a 和 $b 中任何一个为 1 ,则设为1
$a ^ $b Xor(按位异或) 将把 $a 和 $b 中任意一个为 1 另一个为 0 的位设为 1,如果两个数一样则设为0.
~ $a Not(按位取反) 将 $a 中0变1,1变0.
$a << $b Shift left(左移) 将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)。
$a >> $b Shift right(右移) 将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)。
<< 和 >> 是位移运算符,在 PHP 中是数学运算。向任何方向移出去的位都被丢弃。左移时左边的将被挤出,抛弃,意味着符号位也被抛弃,右边以0补上;右移时右边的将被挤出,抛弃,左边以符号位补上,所以符号位得以保留。
-----!--------
在计算机中数值运算都是采用数值的二进制补码来进行运算的。所以我们在进行位运算时,记得将数值转换成二进制补码再进行运算,且运算所得结果也是补码,所以如果要得到十进制的真值,需要再将得到的补码结果转换回去。
正数的原码,反码,补码都是一样的。
负数的反码 = 原码的符号位不变,其他的取反;负数的补码 = 反码 + 1.
二进制数的最高位是符号位,0表示正数,1表示负数。
将补码转换成原码的方法:
一!如果是符号位为零,那么此数是正数,那么原码就等于补码。
二!如果符号位是为一,那么此数是负数,那么有三种方法:
1)有补码退出反码,再推出原码。
2)原码就等于对该补码再求补码。
3)或者符号位不变,然后从低位(右边)开始一直往左走,直到遇到第一个1,那么这个1不变,然后这个1之后遇到的每个数都取反(除了符号位)。
PHP 不支持无符号整数。
PHP 中没有整除的运算符。3/2将显示float型的1.5 但是值可以舍弃小数部分强制转换为integer,如使用(int)(7/2) = 3,强制转换到话是不管是多少都是取其整数部分,舍弃小数部分,或者使用round()函数可以更好地进行四舍五入。
————————————————
版权声明:本文为CSDN博主「lls8672」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011775920/article/details/40584205