什么>>用PHP表示?

时间:2010-05-07 17:14:40

标签: php bit-manipulation

考虑:

echo 50 >> 4;

输出:

3

为什么输出3?

8 个答案:

答案 0 :(得分:32)

二进制50是11 0010,右移4,产生11,等于3。

请参阅PHP documentationWikipedia

答案 1 :(得分:20)

正如php.org所述,>>运算符是一个按位移位运算符,它将位向右移位:

  

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

二进制50是110010>>运算符将这些位移到示例代码中的4个位置。虽然这只发生在一次操作中,你能想到它在这样的多个步骤中:

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

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

答案 2 :(得分:3)

>>是二元右移算子。

您的语句将数值50中的位向右移动四个位置。因为所有整数都用two's complement表示,这等于3.记住这一点的一个简单方法是向右移动一次与除以2相同,向左移动一次与乘以2相同

答案 3 :(得分:3)

>>运算符称为 binary right shift 运算符。

向右移动位4次与连续两次,四次移位相同。结果,在这种情况下将是3.125。由于50是一个int,因此位移将返回此位置,即3

换句话说,500b110010二进制文件。移位4次,我们有0b11,小数为3

答案 4 :(得分:3)

答案 5 :(得分:1)

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

二进制50是110010。

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

答案 6 :(得分:1)

这叫做右移。 '左操作数的位右移右移操作数的位数。左侧空出的位位置用符号位填充,右侧移出的位被丢弃。'

可在此处找到相关信息: http://php.comsci.us/etymology/operator/rightshift.php

答案 7 :(得分:0)

为方便起见,从按位移位计算输出值的最快方法之一是乘以2或除以2。

例如echo 50 >> 4;

鉴于这是一个按位的对,它从字面上意味着该值将减小,然后我们可以将50除以2和4倍来获得输出。

echo 50 >> 4; // 50 /(2 * 2 * 2 * 2)〜3。

鉴于(从)48->(至)63/16(2 * 2 * 2 * 2),结果将大于2且小于4。然后

echo 48 >> 4; // 48 /(2 * 2 * 2 * 2)〜3。

echo 63 >> 4; // 63 /(2 * 2 * 2 * 2)〜3。

但是,当按位左移时,结果将完全不同,因为它乘以n乘以2:

如果echo 50 << 4; // 50 *(2 * 2 * 2 * 2)〜800

如果echo 51 << 4; // 51 *(2 * 2 * 2 * 2)〜816

实时示例:https://3v4l.org/1hbJe