可能的重复问题:
这些运算符是什么意思?
>>在javascript中的用法
请问有人能解释一下位运算符>> 1
吗?
例如:
65 >> 1 = 32
还有当>> 0
时
在以下示例中,它实现了什么:
var size = (Math.random() * 100 >> 0) + 20;
可能的重复问题:
这些运算符是什么意思?
>>在javascript中的用法
请问有人能解释一下位运算符>> 1
吗?
例如:
65 >> 1 = 32
还有当>> 0
时
在以下示例中,它实现了什么:
var size = (Math.random() * 100 >> 0) + 20;
var size = (Math.random() * 100 >> 0) + 20;
>> 0
用于消除小数部分,具体如下:
Math.random()
返回0到0.99999999之间的数字。Math.floor()
函数代替>> 0
。按位运算符>>表示向右移位。
它将二进制值向右移动(并删除最右边的位)。
二进制中65 >> 1是:
1000001 >> 1 = 100000 = 32
它有效地将数字除以2并且舍去余数。
65 >> 1 = 32
65 decimal >> 1 = 32 or, in hex, 0x000041 >> 1 = 0x00000020
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位,将该数字转换为整数,因为只有当操作数为整数时,左移和右移才具有算术意义。
http://en.wikipedia.org/wiki/Bitwise_operation
http://javascript.about.com/library/blbitop.htm
http://www.java2s.com/Tutorial/JavaScript/0040__Operators/ShiftLeft.htm
>> X
接受二进制数并将所有数字向右移动 X
个位置。
在您的示例中,您使用了65,它的二进制表示为01000001。如果您将其向右移动一位,则左侧的第一个空格将填充为0,并且最后一位数字“掉落”。得到00100000,这是32的二进制表示。
>> 0
,因此将数字向右移动0个位置,什么也不做。
'<< X'
表示将数字向左移动相同位数的结果。该内容与编程有关。这可以类比于乘以2^X(左移)或除以2^X(右移),但需要注意的是,二进制移位比除法运算快得多。
>>
是右移位运算符,使用它作为 >> 1
将导致每个位都向右移动一位。这意味着,如果最右边的位是1,它将被排除,而最左边的位将包含0。位运算符将表达式按位移动指定的位数。因此,在您的示例中,您有65,它是二进制0100 0001向右移动1个位置,因此您得到0010 0000,其为32十进制。
另一个例子: 48 >> 3 = 6
48十进制为0011 0000二进制,向右移动3位为0000 0110,其为6十进制。
对于您的第二个示例,我无法帮助您-我无法想象为什么我要将表达式向右移动0个位置,但也许您可以通过调试找到原因?
1000001
,将位移可以得到0100000
,它代表的是32
。 - user657496