美文网首页
JS &、|、^和~(逻辑位运算符)

JS &、|、^和~(逻辑位运算符)

作者: hao_developer | 来源:发表于2023-08-16 17:42 被阅读0次

位运算就是对二进制数执行计算,是整数的逐位运算。例如,1+1=2,在十进制计算中是正确的,但是在二进制计算中,1+1=10;对于二进制数 100 取反,等于 001,而不是 -100。

位运算符有 7 个,分为两类:

  • 逻辑位运算符:位与(&)、位或(|)、位异或(^)、非位(~)
  • 移位运算符:左移(<<)、右移(>>)、无符号右移(>>>)

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

“&”运算符

“&”运算符(位与)用于对两个二进制操作数逐位进行比较,并根据下表所示的换算表返回结果。

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

在位运算中,数值 1 表示 true,0 表示 false,反之亦然。
12 和 5 进行位与运算,则返回值为 4。

console.log(12 & 5);  //返回值4

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


image.png

“|”运算符

“|”运算符(位或)用于对两个二进制操作数逐位进行比较,并根据如表格所示的换算表返回结果。

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

12 和 5 进行位或运算,则返回值为 13。

console.log(12 | 5);  //返回值13

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


image.png

“^”运算符

“^”运算符(位异或)用于对两个二进制操作数逐位进行比较,并根据如表格所示的换算表返回结果。

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

12 和 5 进行位异或运算,则返回值为 9。

console.log(12 ^ 5);  //返回值9

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


image.png

“~”运算符

“~”运算符(位非)用于对一个二进制操作数逐位进行取反操作。

  • 第 1 步:把运算数转换为 32 位的二进制整数。
  • 第 2 步:逐位进行取反操作。
  • 第 3 步:把二进制反码转换为十进制浮点数。
    对 12 进行位非运算,则返回值为 -13。
console.log( ~ 12 );  //返回值-13

下图以算式的形式解析了对 12 进行位非运算的过程。


image.png

位非运算实际上就是对数字进行取负运算,再减 1。

  • ~运算符为取反运算符(数据位,符号位统统取反)
    前提要知道,计算机在存储二进制是以补码形式存储的
  • 正数补码:原码
  • 负数补码是:符号位不变,其余取反,然后整体+1

~正数

步骤:
1. 转成二进制
2. 取反(连同符号位)
3. 取补(取反后,由于第一位是1,计算机认为是负数,所以在存储的时候计算机对其进行取补

##取补说明:
$\color{red}{一个数的补数是将该数按位取反末位加1,则从最低位开始向左寻找到第一个1,这个1及其右边的数位保持不变,这个1以左的各位按位取反。}\$
~4计算
1. 转成二进制

    4 = 0000 0100

2. 取反(连同符号位)
    
    0000 0100 取反= 1111 1011 

3. 取补
    
    1111 1011 取补= 1000 0101=-5  

~负数

步骤:
1. 转成二进制
2. 取补(因为输入的时候是负数,所以计算机就会对其进行取补)
3. 取反(联通符号位)

取补说明:

\color{red}{一个数的补数是将该数按位取反末位加1,则从最低位开始向左寻找到第一个1,这个1及其右边的数位保持不变,这个1以左的各位按位取反。}\

~(-5)计
1. 转成二进制

    -5 = 1000 0101

2. 取补

    1000 0101 取补= 1111 1011

3. 取反(联通符号位

    1111 1011 取反= 0000 0100 = 4

相关文章

  • JavaScript逻辑运算符

    逻辑运算符 前面我们学习了JS的算术运算符和比较运算符,本篇文章我们继续学习JS的逻辑运算符,在编程语言里,比较和...

  • JavaScript 02 (运算符和选择结构)

    js的关系运算符,js的逻辑运算符,js的赋值运算符,js的运算符的优先级问题,js的自增和自减,js的选择结构 ...

  • 位运算

    位运算包括逻辑运算和移位运算,相应地,位运算符包括逻辑运算符(包括~、&、|和^)和移位运算符(包括>>、<<和>...

  • C语言-按位逻辑运算符和位移运算符

    按位逻辑运算符 按位与运算符(bitwise AND operator) a & b 按位计算a和b的逻辑与; 按...

  • web前端入门到实战:js函数与作用域,了解函数基本概念

    通过js基础语法了解到js的值包含数字,字符串和布尔值;js运算符分为算数,赋值,比较和逻辑运算符;js的流程控制...

  • 问题精选-Java

    一、&和&&的区别 &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and) 二、Collection...

  • 阿里总结:java面试题基础

    4、&和&&的区别 答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and) 5、Collecti...

  • 运算符

    算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 键盘打印和输出

  • js的数字与运算符

    数字因为js只有number这一种类型,包含整数和浮点数。 运算符有算术运算符、操作运算符、比较运算符、和逻辑运算...

  • 1.4.运算符

    按功能分为: 算术运算符 赋值运算符 关系运算符 逻辑运算符 位运算符 其他运算符 ---------- 逻辑运算...

网友评论

      本文标题:JS &、|、^和~(逻辑位运算符)

      本文链接:https://www.haomeiwen.com/subject/witlmdtx.html