首页 > 代码库 > 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按位非(~)运算符与~~运算符的理解分析