美文网首页
按位操作符

按位操作符

作者: 佩佩216 | 来源:发表于2019-04-03 09:28 被阅读0次

按位操作符

按位操作符是将操作数当做32为的比特序列(0和1组成),按位操作符操作数字的二进制形式,但是返回值依然是标准的JavaScript数值.

运算符 用法 描述
按位与( AND) a & b 对于每一个比特位,只有两个操作数相应的比特位都是1时,结果才为1,否则为0。
按位或(OR) a I b 对于每一个比特位,当两个操作数相应的比特位至少有一个1时,结果为1,否则为0。
按位异或(XOR) a ^ b 对于每一个比特位,当两个操作数相应的比特位有且只有一个1时,结果为1,否则为0。
按位非(NOT) ~ a 反转操作数的比特位,即0变成1,1变成0。
左移 a << b a 的二进制形式向左移 b (< 32) 比特位,右边用0填充。
有符号右移 a >> b 将 a 的二进制表示向右移b(< 32) 位,丢弃被移出的位。
无符号右移 a >>> b 将 a 的二进制表示向右移b(< 32) 位,丢弃被移出的位,并使用 0 在左侧填充。

有符号的32位整数

所有的按位操作符都会被转成补码形式的有符号的32位整数.补码形式是指一个数的负对应值为数值的所有比特位反转后再加1.反转比特位即该数值进行"非"位运算,也即该数值的反码.
314的二进制编码

00000000000000000000000100111010

下面编码~314,即314的反码

11111111111111111111111011000101

最后,下面编码 -314,即 314 的补码(反转后+1):

11111111111111111111111011000110

补码保证了当一个数是正数时,其最左的比特位是0,当一个数是负数时,其最左的比特位是1。因此,最左边的比特位被称为符号位(sign bit)。

0是所有比特位都由数字0组成的整数

0 (base 10) = 00000000000000000000000000000000 (base 2)

-1是所有比特位都由数字1组成的整数

-1 (base 10) = 11111111111111111111111111111111 (base 2)

-2147483648(十六进制形式:-0x80000000)是除了最左边为1外,其他比特位都为0的整数。

-2147483648 (base 10) = 10000000000000000000000000000000 (base 2)

2147483647(十六进制形式:0x7fffffff)是除了最左边为0外,其他比特位都为1的整数。

2147483647 (base 10) = 01111111111111111111111111111111 (base 2)

按位逻辑操作符

从概念上讲,按位逻辑操作符遵循下面规则:

  • 操作数被转换成32位整数,用比特序列(0和1组成)表示,超过32的数字会被丢弃.
转换前: 11100110111110100000000000000110000000000001
转换后:             10100000000000000110000000000001
  • 第一个操作数的每个比特位与第二个操作数的相应比特位匹配:第一位对应第一位,第二位对应第二位,以此类推.
  • 位运算符应用到每对比特位,结果是新的比特值.

&按位与

对每对比特位执行与操作.只有a和b都是1时,a AND b才是1,否则为0.
如下:

a b a AND b
0 0 0
0 1 0
1 0 0
1 1 1
9 (base 10) = 00000000000000000000000000001001 (base 2)
14 (base 10) = 00000000000000000000000000001110 (base 2)
                   --------------------------------
14 & 9 (base 10) = 00000000000000000000000000001000 (base 2) = 8 (base 10)

将任一数值 x 与 0 执行按位与操作,其结果都为 0。将任一数值 x 与 -1 执行按位与操作,其结果都为 x.

|按位或

对每一对比特位执行或操作,如果a或b中至少一个为1,结果为1,否则为0.

a b a OR b
0 0 0
0 1 1
1 0 1
1 1 1
9 (base 10) = 00000000000000000000000000001001 (base 2)
14 (base 10) = 00000000000000000000000000001110 (base 2)
                   --------------------------------
14 & 9 (base 10) = 00000000000000000000000000001111 (base 2) =  15(base 10)

将任一数值 x 与 0 进行按位或操作,其结果都是 x。将任一数值 x 与 -1 进行按位或操作,其结果都为 -1。

相关文章

  • JavaScript高程读书笔记(2)

    五、操作符 算数操作符、位操作符、关系操作符、 相等操作符 一元操作符++和--:注意a+++,- 位操作符按位非...

  • js中小数取整的方法

    常用方法 “双按位非”操作 按位或 按位异或 左移操作符

  • 按位操作符

    按位操作符 按位操作符是将操作数当做32为的比特序列(0和1组成),按位操作符操作数字的二进制形式,但是返回值依然...

  • 按位操作符

    按位操作符(Bitwise operators)将其操作数(operands)当作 32 位的比特序列(由 0 和...

  • 按位操作符

    平时很少用到按位操作符,总是记不清楚,特此记录一下: 运算符用法描述按位与( AND)a & b对于每一个比特位,...

  • 位运算

    Java中的按位操作符有四个,分别是:&(按位与)、|(按位或)、^(按位异或)、~(按位非)。 1、先来看按位与...

  • Swift - 高级运算符介绍

    除了基本运算符之外,Swift还支持位运算和位移运算,包括:1、按位取反运算:操作符是 ~2、按位与运算:操作符是...

  • C高阶1:二进制操作

    1. 位运算 按位运算No.操作符功能1&按位与2|按位或3~按位取反4^按位异或 运算规则pqp & qp | ...

  • iOS:按位操作符

    进制表示法: 按位操作符 向左移位运算符 << :对值进行向左移动,超出数据项的高位将丢失,低位移入的值总为0,该...

  • JS按位操作符

    按位操作符(Bitwise operators) 将其操作数(operands)当作32位的比特序列(由0和1组成...

网友评论

      本文标题:按位操作符

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