考虑:
echo 50 >> 4;
输出:
3
为什么它会输出3?
考虑:
echo 50 >> 4;
输出:
3
为什么它会输出3?
如php.org文档所述,>>
运算符是位移运算符,它将位向右移动:
$a >> $b-将$a的位向右移动$b步(每一步意味着"除以2")
50在二进制下为110010
,在您的示例代码中,>>
运算符将这些位向右移动4个位置。尽管这是在一个操作中完成的,但是您可以将其看作多个步骤,例如:
00011001
00001100
00000110
00000011
由于二进制11
等于十进制3
,因此该代码输出3。
>>是二进制右移运算符。
您的语句将数字值50的位向右移动了四个位置。因为所有整数都使用二进制补码表示,所以这相当于3。一个简单的记忆方法是:向右移动一位相当于除以2,向左移动一位相当于乘以2。
>>
运算符被称为二进制右移运算符。3.125
。由于50是整数,位移运算将返回其整数部分,即3
。50
的二进制表示为0b110010
。向右移动4次得到0b11
,即十进制中的3
。它将位向下移动了四个位置。
二进制中的50是110010。
向下移动四个位置后是11,即3。
echo 50 >> 4;
。鉴于这是一个按位右移,它字面上意味着该值将会减小,然后我们可以通过将50除以2和4次来获得输出结果。因为(从)48 ->(到)63/16(2*2*2*2),结果将大于2且小于4。当按位左移时,结果将完全不同,因为它将乘以2的n次方:echo 50 << 4;
// 50*(2*2*2*2) ~ 800echo 51 << 4;
// 51*(2*2*2*2) ~ 816