PHP中的 >> 是什么意思?

15

考虑:

echo 50 >> 4;

输出:

3

为什么它会输出3?


3
这适用于任何具有位运算的编程语言。 - Tim Post
8个回答

33

7
位运算符,具体来说是算术右移位运算符。 - webbiedave
由于您正在处理PHP,因此您可以在此处查看有关它的其他信息(http://php.net/manual/en/language.operators.bitwise.php)。维基页面也相关(http://en.wikipedia.org/wiki/Bitwise_operation#Bit_shifts) - nevets1219
1
有点相关?C++ 位运算符文档 - Félix Adriyel Gagnon-Grenier

22

php.org文档所述,>>运算符是位移运算符,它将位向右移动:

$a >> $b-将$a的位向右移动$b步(每一步意味着"除以2")

50在二进制下为110010,在您的示例代码中,>>运算符将这些位向右移动4个位置。尽管这是在一个操作中完成的,但是您可以将其看作多个步骤,例如:

  • 步骤1-00011001
  • 步骤2-00001100
  • 步骤3-00000110
  • 步骤4-00000011

由于二进制11等于十进制3,因此该代码输出3。


你可能想使用0进行右侧填充,以使其更清晰(虽然从技术上讲这是一样的,但看起来像是位并没有移动,而是从右侧丢弃)。 - Synetech
感谢您的反馈 - 我刚刚更新了答案,以澄清这两个问题。 - Justin Ethier
1
+1,对于从未探索过位运算的人来说,这是最好的解释。 - Tim Post

3

>>是二进制右移运算符。

您的语句将数字值50的位向右移动了四个位置。因为所有整数都使用二进制补码表示,所以这相当于3。一个简单的记忆方法是:向右移动一位相当于除以2,向左移动一位相当于乘以2。


3
>>运算符被称为二进制右移运算符。
将位向右移动4次相当于连续四次除以2。在这种情况下,结果是3.125。由于50是整数,位移运算将返回其整数部分,即3
换句话说,50的二进制表示为0b110010。向右移动4次得到0b11,即十进制中的3

3

1

它将位向下移动了四个位置。

二进制中的50是110010。

向下移动四个位置后是11,即3。


1

1
链接已经失效(“此域名已过期”)。 - Peter Mortensen

1
为了方便起见,从位移中计算输出值最快的方法之一是乘以或除以2。例如: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) ~ 800
如果 echo 51 << 4; // 51*(2*2*2*2) ~ 816
实时示例: https://3v4l.org/1hbJe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接