Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript.|&;和toString_Javascript_Operators - Fatal编程技术网

Javascript.|&;和toString

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

请帮帮我。我不明白这个运算符(|和&)是如何工作的,以及为什么这个代码返回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