| 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