有人可以解释按位运算符>> 1
吗?
示例:
65 >> 1 = 32
以及>> 0
在这个例子中它实现了什么:
var size = (Math.random() * 100 >> 0) + 20;
答案 0 :(得分:6)
var size = (Math.random() * 100 >> 0) + 20;
上例中的 >> 0
用于消除小数部分,如下所示:
Math.floor()
函数而不是>> 0
。答案 1 :(得分:2)
运营商'>>'将变量的内容向右移1位。如您在示例中所示,这有效地导致该值的整数除以2:
65 >> 1 = 32
假设变量总是32位长。然后这个例子说:
65 decimal >> 1 = 32 or, in hex, 0x000041 >> 1 = 0x00000020
更一般地说:运营商'>>'将其操作数除以32位整数,除以2的幂,其值为移位长度。因此:
129 decimal >> 1 = 64 or 0x000081 >> 1 = 0x000040
129 decimal >> 2 = 32 or 0x000081 >> 2 = 0x000020
129 decimal >> 5 = 2 or 0x000081 >> 5 = 0x000002
和
129 decimal >> 8 = 0 or: 0x000081 >> 8 = 0x000000
运营商'<<'正如您所期望的那样, 倍增 其操作数。
我不知道Math.random()如何运作,但我愿意打赌它的浮点返回值的右移0会将该数字转换为整数,因为左右移位有算术运算仅在操作数是整数时才有意义。
答案 2 :(得分:1)
按位运算符>> 表示向右移位 它将二进制值向右移动(并删除最右边的位)。
65>>二进制1 :
1000001>> 1 = 100000 = 32
它有效地将数字除以2并删除余数。
答案 3 :(得分:0)
按位移位操作符将输入x位的每个位向右移位(>>)或向左移位(<<<<<<<<<<<<
65是1000001,因此65>> 1 = 0100000,即32。
修改强>
以下是一些有用的链接:
http://en.wikipedia.org/wiki/Bitwise_operation
http://javascript.about.com/library/blbitop.htm
http://www.java2s.com/Tutorial/JavaScript/0040__Operators/ShiftLeft.htm
答案 4 :(得分:0)
>> X
获取二进制数并将所有数字向右移动X
个位置。
在您的示例中,您使用65,即二进制的01000001。如果你向右移动一个,第一个空格(在左边)用0填充,最后一个数字'从末尾开始'。给00100000,这是32的二进制表示。
>> 0
因此将数字0空格向右移动,并且什么都不做。
'<< X'也是一样,但是将数字向左移动。
可以比较这些乘以2 ^ X(左移)或乘以2 ^ X(右移),但应注意二进制移位比除法运算快得多。
答案 5 :(得分:0)
您可以从rsplak的帖子中了解输出为32的原因。 >>
是右移位运算符,并将其用作>> 1
将导致每个位向右移位一位。这意味着,如果最右边的位是 1 ,它将被驱逐,最左边的位将包含 0 。
答案 6 :(得分:0)
按位运算符将表达式移位数位。所以在你的例子中你有 65这是二进制0100 0001 shiftet 1位置向右,所以你有0010 0000这是32十进制。
另一个例子: 48>> 3 = 6
48十进制是0011 0000二进制移位3右边是0000 0110,这是6位小数。
对于你的第二个例子,我无法帮助你 - 我无法想象为什么我会将一个表达式移动0个位置,但也许你可以找到调试它?