| 0和~~有什么区别?

| 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

这两个操作都是按位操作。

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

|是按位或

的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