Javascript 数学。随机和算术移位
如果我有以下JavaScript代码:Javascript 数学。随机和算术移位,javascript,bit-shift,Javascript,Bit Shift,如果我有以下JavaScript代码: var index1 = (Math.random() * 6) >> 0; var index2 = Math.floor(Math.random() * 6); index1或index2的结果介于0和6之间 我对>>运算符的理解一定有误。我认为通过使用index1的结果将介于1和6之间 但是,我注意到,如果我使用操作符,我不需要对index1使用Math.floor()或Math.round() 我知道我可以通过将1添加到两个索引中来实
var index1 = (Math.random() * 6) >> 0;
var index2 = Math.floor(Math.random() * 6);
index1
或index2
的结果介于0
和6
之间
我对>>
运算符的理解一定有误。我认为通过使用index1
的结果将介于1
和6
之间
但是,我注意到,如果我使用
操作符,我不需要对index1
使用Math.floor()
或Math.round()
我知道我可以通过将1
添加到两个索引中来实现这一点,但我希望有更好的方法来确保结果从1
添加到6
,而不是添加1
我知道它们的操作数是32位(0和1)的序列,而不是十进制、十六进制或八进制数。例如,十进制数字9的二进制表示为1001。按位运算符对这种二进制表示执行操作,但返回标准JavaScript数值
更新:
我在第26行看到了这个CAAT的最初用法,我想知道它是否会返回一个介于1
和6
之间的随机数,而且它似乎只会返回一个介于0
和6
之间的随机数。所以你永远不会真正看到anim1.png
fish图像
提前感谢您提供的任何启示。维基百科说(负数的算术右移相当于在某些历史计算机使用的符号数字的补码表示中使用向0舍入的除法)
这不完全是一个答案,但其思想是>>0确实是特定的,一般不应用于获取1到6之间的范围
大多数人都会告诉你去做
Math.floor((Math.random()*10)+1);
维基百科说(负数的算术右移相当于一些历史上的计算机使用的符号数字的补码表示法中使用向0舍入的除法)
这不完全是一个答案,但其思想是>>0确实是特定的,一般不应用于获取1到6之间的范围
大多数人都会告诉你去做
Math.floor((Math.random()*10)+1);
您不应该在javascript中使用位运算符。数字被实现为64个浮点,并在内部转换为32位整数进行运算,然后再转换回来@Walkereno感谢您的链接。请注意,使用内部方法将值转换为整数的算法的第5步。@walkereno这是一个有点笼统的语句。也许OP在这种情况下没有明智地使用它,但按位运算符有它们的用途。@RobG,嗯,来自Skeetman本人:。编辑:如果你遇到过其他用法,你仍然对它们感兴趣。你不应该在javascript中使用位运算符。数字被实现为64个浮点,并在内部转换为32位整数进行运算,然后再转换回来@Walkereno感谢您的链接。请注意,使用内部方法将值转换为整数的算法的第5步。@walkereno这是一个有点笼统的语句。也许OP在这种情况下没有明智地使用它,但按位运算符有它们的用途。@RobG,嗯,来自Skeetman本人:。编辑:如果你遇到过其他用途,你仍然对它们感兴趣。对于1到6的范围,乘数不应该是6吗?或者使用
Math.ceil
和5的乘数。对于1到6的范围,乘数不应该是6吗?或者使用Math.ceil
和5的乘数。