想象兩種舍功能| 0和~~有什麼區別?
function round1 (number) {
return ~~number;
}
function round2 (number) {
return number|0;
}
它們之間有什麼實際差別?我正在尋找深入的解釋。
想象兩種舍功能| 0和~~有什麼區別?
function round1 (number) {
return ~~number;
}
function round2 (number) {
return number|0;
}
它們之間有什麼實際差別?我正在尋找深入的解釋。
這兩個操作都是按位操作。
~
是按位不是(又名按位反轉)
|
是按位或
的JavaScript規範指出所執行的逐位操作之前任何Number
應轉換爲Int32(參見:http://ecma262-5.com/ELS5_HTML.htm#Section_11.10)
從規範的特定行:
5)設爲lnum緩衝區裏ToInt32(lval中)。
6)讓rnum爲ToInt32(rval)。
~ 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
一個使用兩個一元操作將'Number'轉換爲32位整數,而另一個使用單個操作和兩個操作數來執行相同操作。 – zzzzBov 2015-01-26 22:28:57
zzzzBov的解釋給了我一個想法......並且它們都與'Math.round(n)'或'Math.trunc(n)'相比'n = Math.exp(33)'給出'-1705798981', '214643579785916'' 214643579785915' – Paul 2015-01-26 22:31:16
這是很常見的知識 - 按位運算符總是將操作數轉換爲帶符號的32位整數。 – Ginden 2015-01-26 22:34:17