2015-01-26 371 views
0

想象兩種舍功能| 0和~~有什麼區別?

function round1 (number) { 
    return ~~number; 
} 
function round2 (number) { 
    return number|0; 
} 

它們之間有什麼實際差別?我正在尋找深入的解釋。

+1

一個使用兩個一元操作將'Number'轉換爲32位整數,而另一個使用單個操作和兩個操作數來執行相同操作。 – zzzzBov 2015-01-26 22:28:57

+0

zzzzBov的解釋給了我一個想法......並且它們都與'Math.round(n)'或'Math.trunc(n)'相比'n = Math.exp(33)'給出'-1705798981', '214643579785916'' 214643579785915' – Paul 2015-01-26 22:31:16

+0

這是很常見的知識 - 按位運算符總是將操作數轉換爲帶符號的32位整數。 – Ginden 2015-01-26 22:34:17

回答

0

這兩個操作都是按位操作。

~是按位不是(又名按位反轉)

|是按位或

的JavaScript規範指出所執行的逐位操作之前任何Number應轉換爲Int32(參見:http://ecma262-5.com/ELS5_HTML.htm#Section_11.10

從規範的特定行:

5)設爲lnum緩衝區裏ToInt32(lval中)。

6)讓rnum爲ToInt32(rval)。

0
~ is "not" (binary/bitwise) ~3(011) => (100)4 

| is "or" (binary/bitwise) 0(000) | 3(011) => 3 

〜(不)將切換,其中在其上變爲關斷的位,並且其中關閉它成爲上

| (或)會給邏輯或給出1

1 OR 0比特之間。在您的例子保證數爲3

這裏~~number對應於not(not(011)) =>not(100) =>011 i.e 3

這裏number|0對應於011 or 000 =>011 ie 3

相關問題