JS按位非(~)运算符与~~运算符的理解分析

Posted 风雨后见彩虹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS按位非(~)运算符与~~运算符的理解分析相关的知识,希望对你有一定的参考价值。

~对操作数按位取反,两个的意思即作两次取反操作,其实是等作原数本身(操作数是32整数范围内)

下面举个例子:

var n = -4.9;
console.log(n); //4.9
n = ~n;
console.log(n);//3
n = ~n;
console.log(n);//4

例2:

var n = 4.2;
console.log(n); //4.2
n = ~n;
console.log(n);//-5
n = ~n;
console.log(n);//4

例3:

var n = 4;
console.log(n); //4
n = ~n;
console.log(n);//-5
n = ~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按位非(~)运算符与~~运算符的理解分析的主要内容,如果未能解决你的问题,请参考以下文章

位运算符按位与按位或按位非左移右移原码反码补码

需要对按位非 (~) 运算符进行说明

按位非运算符

按位非运算符的解释

java逻辑运算符作用

位运算