首页 > 代码库 > JS按位非(~)运算符与~~运算符的理解分析
JS按位非(~)运算符与~~运算符的理解分析
~对操作数按位取反,两个的意思即作两次取反操作,其实是等作原数本身(操作数是32整数范围内)
下面举个例子:
var n = -4.9;console.log(n); //4.9n = ~n;console.log(n);//3n = ~n;console.log(n);//4
例2:
var n = 4.2;console.log(n); //4.2n = ~n;console.log(n);//-5n = ~n;console.log(n);//4
例3:
var n = 4;console.log(n); //4n = ~n;console.log(n);//-5n = ~n;console.log(n);//4
首先,如果一个数据在尝试转换为32整形数据时,结果<0,那么就需要对其上舍入,比如-2.9->-2,如果>0,对其下舍入,比如:2.6->2;
一个数据如果不能转换为32位二进制表示,就转换为NaN;继而转为-1;比如~{}/~NaN ==-1;
有符号整数使用 31 位表示整数的数值,用第 32 位表示整数的符号,0 表示正数,1 表示负数。
数值范围从 -2^31 - 2^31-1 即 -2147483648 到 2147483647。
JavaScript 进行位操作时,是采用32位 有符号 整型,这意味着其转换的结果也是32位有符号整型。
~运算符的详细解释:
将 expression 转换为一个 32 位带符号整数,然后按位对 1 求补。即,将结果中为 0 的每一位设置为 1,并将结果中为 1 的每一位设置为 0。结果是一个带符号的 32 位整数。此运算符也称为对一求补运算符或按位求补运算符。
例如,十六进制值 0x7777 表示为二进制数:
0111011101110111
该十六进制值 ~0x7777 的按位取反的二进制数为:
1000100010001000
在十六进制中,它是 0x8888。因此,~0x7777 就是 0x8888。
参考地址:https://zhidao.baidu.com/question/554279014.html?qq-pf-to=pcqq.c2c
http://www.jb51.net/article/27852.htm
JS按位非(~)运算符与~~运算符的理解分析