JavaScript　内部采用补码形式表示负数,即需要将这个数减去1,再取一次反,然后加上负号,才能得到这个负数对应的10进制值。这个数减去1等于　11111111111111111111111111111011　,再取一次反得到　00000000000000000000000000000100　,再加上负号就是　-4　。考虑到这样的过程比较麻烦,可以简单记忆成,一个数与自身的取反值相加,等于-1。　~　-　3　//　2　上面表达式可以这样算,　-3　的取反值等于　-1　减去　-3　,结果为　2　。　对一个整数连续两次二进制否运算,得到它自身。　~~　3　//　3　所有的位运算都只对整数有效。二进制否运算遇到小数时,也会将小数部分舍去,只保留整数部分。所以,对一个小数连续进行两次二进制否运算,能达到取整效果。　~~　2.9　//　2　~~　47.11　//　47　~~　1.9999　//　1　~~　3　//　3　使用二进制否运算取整,是所有取整方法中最快的一种。　对字符串进行二进制否运算,JavaScript　引擎会先调用　Number　函数,将字符串转为数值。　//　相当于~Number('011')　~　'011'　//　-12　//　相当于~Number('42　cats')　~　'42　cats'　//　-1　//　相当于~Number('0xcafebabe')　~　'0xcafebabe'　//　889275713　//　相当于~Number('deadbeef')　~　'deadbeef'　//　-1　Number　函数将字符串转为数值的规则,参见《数据的类型转换》一章。　对于其他类型的值,二进制否运算也是先用　Number　转为数值,然后再进行处理。　//　相当于　~Number(1　//　相当于　~Number(NaN)　~　NaN　//　-1　//　相当于　~Number(null)　~　null　//　-1　异或运算符#异或运算(　^　)在两个二进制位不同时返回　1　,相同时返回　0　。　0　^　3　//　3　上面表达式中,　0　(二进制　00　)与3(二进制　11　)进行异或运算,它们每一个二进制位都不同,所以得到　11　(即3)。　“异或运算”有一个特殊运用,连续对两个数　a　和b进行三次异或运算,　a^=b;　b^=a;　a^=b;　,可