看到一个题目~~3.14得到是3,一下子有点蒙,之前在Javascript中完全没有见过~这个运算符。经查才知道~是补位运算符,但是跟原码反码补码又有点不同(在反码这一块,不记正负),好吧,大学的东西都还给老师了。
举个简单点的例子吧。~2 = -3,看看怎么得出这个结果的:
2的二进制是:
0000 0010
将它简单翻转:
1111 1101
接下我们看看怎么得出 -3。先给出3的二进制:
0000 0011
翻转:
1111 1100
加1:
1111 1101
因此,运算符~只是翻转所有比特位,再由机器来解析结果。
PS. 有个更便捷的方式来计算: ~n = -n-1