Javascript.|&;和toString
请帮帮我。我不明白这个运算符(|和&)是如何工作的,以及为什么这个代码返回a-f符号?表达式Javascript.|&;和toString,javascript,operators,Javascript,Operators,请帮帮我。我不明白这个运算符(|和&)是如何工作的,以及为什么这个代码返回a-f符号?表达式ddd&2 | 8通过取8的按位OR运算和ddd和2的按位and运算来执行按位算术。如果你没有;如果您不理解按位运算,您应该参考解释它们是什么 代码可以返回a-f范围内的字符,因为您将基数参数16传递给原型方法,这意味着它将以十六进制显示数字。表达式ddd&2 | 8采用8的按位OR运算和ddd和2的按位and运算进行按位算术。如果你没有;如果您不理解按位运算,您应该参考解释它们是什么 代码可以返回a-f
ddd&2 | 8
通过取8的按位OR运算和ddd
和2的按位and运算来执行按位算术。如果你没有;如果您不理解按位运算,您应该参考解释它们是什么
代码可以返回a-f范围内的字符,因为您将基数参数
16
传递给原型方法,这意味着它将以十六进制显示数字。表达式ddd&2 | 8
采用8的按位OR运算和ddd
和2的按位and运算进行按位算术。如果你没有;如果您不理解按位运算,您应该参考解释它们是什么
代码可以返回a-f范围内的字符,因为您将基数参数
16
传递给prototype方法,这意味着它将以十六进制显示数字。这会选择一个从0到15的随机实数:
var ddd = Math.random() * 16;
console.log((ddd & 3 | 8).toString(16));
例如,您可能会得到11.114714370026688
var ddd = Math.random() * 16;
这是数字为3的结果的按位AND。要做的第一件事是从ddd
中获取数字并将其转换为整数,因为按位运算符不是为浮点数定义的。因此,在我的示例中,它将ddd
视为整数11
接下来它要做的就是对两个数字的二进制表示进行AND运算。二进制格式的11个是1011
,3个是0011
。当你和他们在一起的时候,你会得到一个全为零的二进制数,除非两个数中都有1。只有最后两位数字在两个数字中都有1,因此结果是0011
,再次等于十进制3
ddd & 3
它对到目前为止(3)的结果(8)进行位或运算。或类似于和,但结果有1,无论哪个数字中有1。由于三个仍然是二进制的0011
,八个是1000
,因此结果是1011
——返回到小数点后十一位
通常,上面的计算将8位(从右起第三位)设置为1,将4位(从右起第二位)设置为0,而不考虑其他位。最终的结果是将您原来的随机数(范围为0-15)转换为四个数字中的一个:8、9、10或11。这是一种非常迂回的方法,可以生成8到11之间的随机数Math.floor(8+Math.random()*4)
会以更直接的方式做同样的事情
然后,它以十六进制(以16为基数)打印出结果,因此您可以得到
8
、9
、a
(以16为基数为10)或b
(以11为基数)。这会选择一个从0到15的随机实数:
var ddd = Math.random() * 16;
console.log((ddd & 3 | 8).toString(16));
例如,您可能会得到11.114714370026688
var ddd = Math.random() * 16;
这是数字为3的结果的按位AND。要做的第一件事是从ddd
中获取数字并将其转换为整数,因为按位运算符不是为浮点数定义的。因此,在我的示例中,它将ddd
视为整数11
接下来它要做的就是对两个数字的二进制表示进行AND运算。二进制格式的11个是1011
,3个是0011
。当你和他们在一起的时候,你会得到一个全为零的二进制数,除非两个数中都有1。只有最后两位数字在两个数字中都有1,因此结果是0011
,再次等于十进制3
ddd & 3
它对到目前为止(3)的结果(8)进行位或运算。或类似于和,但结果有1,无论哪个数字中有1。由于三个仍然是二进制的0011
,八个是1000
,因此结果是1011
——返回到小数点后十一位
通常,上面的计算将8位(从右起第三位)设置为1,将4位(从右起第二位)设置为0,而不考虑其他位。最终的结果是将您原来的随机数(范围为0-15)转换为四个数字中的一个:8、9、10或11。这是一种非常迂回的方法,可以生成8到11之间的随机数Math.floor(8+Math.random()*4)
会以更直接的方式做同样的事情
然后,它以十六进制(以16为基数)打印出结果,因此得到
8
、9
、a
(以16为基数为10)或b
(以11为基数)。它实际上返回8-b
:它实际上返回8-b
: