逻辑位运算

课后整理 2020-12-20

逻辑位运算符与逻辑运算符的运算方式是相同,但是针对的对象不同。逻辑位运算符针对的二进制的整数值,而逻辑运算符针对的是非二进制的其他类型数据。

&运算符(位与)表示布尔AND操作。它对二进制值逐位进行比较,并根据表9所示的换算表返回结果。

表9  &运算符

第一个值的数位值 第二个值的数位值 运算结果
1 1 1
1 0 0
0 1 0
0 0 0

【示例1】12和5进行位与运算,则返回值为4。

alert(12&5);                        // 返回值4

如图4所示以算式的形式解析12和5进行位与运算的过程。通过位与运算,只有第3位的值为全true,故返回true,其他位均返回false。

图4  12和5进行位与运算

【提示】

在位运算中数值1表示true,0表示false,反之亦然。

|运算符(位或)表示布尔OR操作。位或运算将根据表10所示的换算表返回结果。

表10  |运算符

第一个值的数位值 第二个值的数位值 运算结果
1 1 1
1 0 1
0 1 1
0 0 0

【示例2】12和5进行位或运算,则返回值为13。

alert(12|5);                        // 返回值13

如图5所示以算式的形式解析12和5进行位或运算的过程。通过位或运算,只有第2位的值为false外,其他位均返回true。

图5  12和5进行位或运算

^运算符(位异或)表示布尔XOR操作。位异或运算将根据表11所示的换算表返回结果。

表11  ^运算符

第一个值的数位值 第二个值的数位值 运算结果
1 1 0
1 0 1
0 1 1
0 0 0

【示例3】12和5进行位异或运算,则返回值为9。

alert(12^5);                        // 返回值9

如图6所示以算式的形式解析12和5进行位异或运算的过程。通过位异或运算,第1、4位的值为true,而第2、4位的值为false。

图6  12和5进行位异或运算

~运算符(位非)表示布尔NOT操作。位非运算将根据三步操作进行处理:

第1步,把运算数转换为32位的二进制整数。

第2步,逐位反码,即逐位进行取反操作。

第3步,把二进制反码转换为十进制浮点数。

【示例4】对12进行位非运算,则返回值为-13。

alert(~12);                         // 返回值-13

如图7所示以算式的形式解析对12进行位非运算的过程。

图7  对12进行位非运算

位非运算本质上就是对数字进行求负运算,然后再减1。因此,可以使用如下方法也可以获得相同的结果。

~12 = -12-1;

如果使用如下语句则可以检测它们是否相等:

alert(~12 == -12-1);                // 返回true