Javascript. | & and toString
Javascript. | & and toString
var ddd = Math.random() * 16;
console.log((ddd & 3 | 8).toString(16));
请帮帮我。我不明白这个运算符(| 和 &)是如何工作的,为什么这段代码返回 a-f 符号?
表达式 ddd & 2 | 8
通过采用 8 的按位 OR 运算以及 ddd
和 2 的按位 AND 运算来执行按位算术。如果您不了解按位运算,则应参阅本文来解释它们是什么。
该代码可以返回 a-f 范围内的字符,因为您传入了基数参数16
Number.toString
prototype 方法,这意味着它将以十六进制显示数字。
这会从 0 到 15 中选择一个随机实数:
var ddd = Math.random() * 16;
例如,您可能会得到 11.114714370026688。
ddd & 3
这是数字 3 的结果的按位 AND。 要做的第一件事是从ddd
中获取数字并将其转换为整数,因为没有为浮点数定义按位运算符。 所以在我的例子中,它把ddd
当作整数11。
接下来它要做的是执行两个数字的二进制表示的 AND。 二进制中的 11 是 1011
,3 是0011
。 当你和它们在一起时,你会得到一个二进制数,除了两个数字中都有一个 1 之外,它都是零。 只有最后两位数字在两个数字中都有 1,所以结果是 0011
,再次等于十进制 3。
| 8
到目前为止,这对结果(3)的按位OR与数字8。 OR 类似于 AND,但只要两个数字中都有 1,结果就有 1。 由于 3 在二进制中仍然0011
,而 8 是1000
,结果是 1011
- 回到十进制 11。
通常,上述计算将 8 位(右起第三个)设置为 1,将 4 位(右起第二个)设置为 0,而其他位则不留。最终结果是将原始随机数(在 0-15 范围内)转换为仅有的四个数字之一:8、9、10 或 11。因此,这是一种非常迂回的方式,可以生成 8 到 11 之间的随机数(包括 8 和 11)。 Math.floor(8 + Math.random()*4)
会以更直接的方式做同样的事情。
然后,它以十六进制(以 16 为基数)打印结果,因此您可以得到 8
、9
、a
(以 16 为基数为 10)或b
(以 11 为基数)。
- toBoolean方法类似于toString
- Selenium WebDriver and JavaScript change
- PHP and Javascript functions
- Javascript Return and if/else
- SetTimeout and clearTimeout in Javascript
- lightbox in html 5 and javascript
- TimelineJS and AngularJS
- timeago.js with datatable and PHP
- javascript button ajax and php
- Ajax and Json with Rails
- Combine onload, onresize and onclick
- php布尔值's小写AND大写和数字布尔值'可以接受
- setTimeout and V8
- Jquery post and onclick
- Moment js and IOS
- Rails 3.2 and Paloma gem
- Backbone, TypeScript, and super
- JS valueOf and toString
- Javascript. | & and toString
- Object.create() and toString()