簡體   English   中英

Javascript。 | &和toString

[英]Javascript. | & and toString

var ddd = Math.random() * 16;    
console.log((ddd & 3 | 8).toString(16));

請幫幫我。 我不明白此運算符(|和&)的工作方式,為什么此代碼返回af符號?

表達式ddd & 2 | 8 ddd & 2 | 8通過采用8的按位或運算以及ddd和2的按位與運算來進行按位算術。如果您不了解按位運算,則應查閱本文以解釋它們的含義。

該代碼可以返回af范圍內的字符,因為您將基數參數16傳遞給了Number.toString原型方法,這意味着它將以十六進制顯示數字。

這會選擇一個從0到15的隨機實數:

var ddd = Math.random() * 16;    

例如,您可能會得到11.114714370026688。

ddd & 3

這是數字3與結果的按位與。首先要做的是從ddd獲取數字並將其轉換為整數,因為未為浮點數定義按位運算符。 因此,在我的示例中,它將ddd視為整數11。

接下來要做的是對兩個數字的二進制表示進行“與”運算。 二進制中的11是1011 ,三個是0011 當您將它們與在一起時,您會得到一個全為零的二進制數字,除非兩個數字中為1。 只有最后兩位數字的兩個數字都為1,因此結果為0011 ,再次等於十進制3。

| 8

到目前為止,對結果(3)與數字8進行按位或運算。OR與AND相似,但是無論哪個數字中有1,結果都為1。 由於三進位仍然是0011 ,八進位是1000 ,因此結果是1011返回十進制11。

通常,以上計算將8位(從右數起的第三位)設置為1,將4位(從右數起的第二位)設置為0,而其他位則保持不變。 最終結果是獲取原始的隨機數(范圍為0-15),並將其轉換為以下四個數之一:8、9、10或11。因此,這是生成隨機數的一種非常round回的方法8至11(含)之間。 Math.floor(8 + Math.random()*4)將以更直接的方式完成相同的操作。

然后,它打印出的結果以十六進制(基數為16),讓您得到89a (在基地16十個),或b (這是11)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM