关于javascript中的~
本文介绍了关于javascript中的~的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
《javascript权威指南》里是这么说的:
位运算符"~"是一元运算符,位于一个整型参数之前,它将操作数的所有位取反。根据javascript中所带符号的整数的表示方法,对一个值使用"~",运算符相当于改变它的符号并减1。例如~0x0F = 0xFFFFFFF0或-16。
这是两个~符号:
~~5===5; //true
~~4.5===4.5 //false
~~-5===-5 //true
是不是可以推断出~~n===n,n为未知数字
当为一个~符号:
~5===-6; //true
~4.5===-4.5 //false
~4.5===-3 //true
~-5===-5 //false
~-5===4 //true
~-4.5===3 //true
是不是可以推断出~n===-parseInt(n)-1,n为未知数字
解决方案
在 JS 里面,所有位操作符里面都先执行 ToInt32
,但是parseInt
并不会执行这一步。
function toInt32(n) { return n>>0;}
function toUint32(v) { return v>>>0; }
var maxInt32 = (toUint32(-1)+1)/2-1;
var num = maxInt32 + 53.5;
console.log(num); // 2147483700.5
console.log(toInt32(num)); // -2147483596
console.log(~num); // 2147483595
console.log(-parseInt(num)-1); //-2147483701
ES5.1 对~
的描述(parseInt就不贴了太长,自己可以在下面的链接里找):
The production UnaryExpression : ~ UnaryExpression is evaluated as follows:
Let expr be the result of evaluating UnaryExpression.
Let oldValue be ToInt32(GetValue(expr)).
Return the result of applying bitwise complement to oldValue. The result is a signed 32-bit integer.
http://www.ecma-international...
这篇关于关于javascript中的~的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文