考虑:
echo 50 >> 4;
输出:
3
为什么输出3?
答案 0 :(得分:32)
二进制50是11 0010
,右移4,产生11
,等于3。
答案 1 :(得分:20)
正如php.org所述,>>
运算符是一个按位移位运算符,它将位向右移位:
$ a>> $ b - 向右移动$ a $ b步的位(每一步意味着“除以2”)
二进制50是110010
,>>
运算符将这些位移到示例代码中的4个位置。虽然这只发生在一次操作中,你能想到它在这样的多个步骤中:
00011001
00001100
00000110
00000011
由于二进制11
等于十进制3
,因此代码输出3.
答案 2 :(得分:3)
>>是二元右移算子。
您的语句将数值50中的位向右移动四个位置。因为所有整数都用two's complement表示,这等于3.记住这一点的一个简单方法是向右移动一次与除以2相同,向左移动一次与乘以2相同
答案 3 :(得分:3)
>>
运算符称为 binary right shift 运算符。
向右移动位4次与连续两次,四次移位相同。结果,在这种情况下将是3.125
。由于50是一个int,因此位移将返回此位置,即3
。
换句话说,50
是0b110010
二进制文件。移位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