JS中的位移运算

快速理解位运算:

  1. 位运算比其他运算(加减乘除)更加底层,所以运算的更快,但是不是所有场景都可以用
  2. 位运算只针对整数(带符号),小数进行位运算会先自动转为整数,再进行计算
  3. 数字的表示


    ct_js_integer_binary_signed_32bits.gif

将我们一般使用的十进制整数转换为二进制,其他位数补0,这样就有32位了,正数位31为0,负数位31为1,这样就可以表示正负数了。

位运算

  1. 或|(一位为1即为1)
    1001
    0011
    结果:1011
  2. 与&(每位为1才为1)
    1001
    0011
    结果:0001
  3. 异或^(每位不同才为1)
    1001
    0011
    结果:1010
  4. 非~(取反)
    1001
    结果:0110
  5. 左移<<(向左移动,用0补位)
    3<<2
    0000 0000 0000 0000 0000 0000 0000 0011
    左移2位
    00 0000 0000 0000 0000 0000 0000 0011
    用0补位
    0000 0000 0000 0000 0000 0000 0000 1100
  6. 带符号右移>>
  • 负数右移:-3>>2
    -3的32位:1000 0000 0000 0000 0000 0000 0000 0011
    1、保持31位(符号位)不变,取反:
    1111 1111 1111 1111 1111 1111 1111 1100
    2、加1:
    1111 1111 1111 1111 1111 1111 1111 1101
    3、右移2位:
    1111 1111 1111 1111 1111 1111 1111 11
    4、高位补1:
    1111 1111 1111 1111 1111 1111 1111 1111
    5、保留符号位取反:
    1000 0000 0000 0000 0000 0000 0000 0000
    6、加1:
    1000 0000 0000 0000 0000 0000 0000 0001
    结果:1000 0000 0000 0000 0000 0000 0000 0001 -----(-1)
  • 正数右移:3>>2
    3的32位:0000 0000 0000 0000 0000 0000 0000 0011
    1、右移2位:
    00 0000 0000 0000 0000 0000 0000 0000
    2、高位补0:
    0000 0000 0000 0000 0000 0000 0000 0000
    结果:0000 0000 0000 0000 0000 0000 0000 0000 -----(0)
  1. 不带符号右移>>> --永不为负
    -3>>>2
    -3的32位:1000 0000 0000 0000 0000 0000 0000 0011
    向右移动2两位:
    10 0000 0000 0000 0000 0000 0000 0000
    高位补0:
    0010 0000 0000 0000 0000 0000 0000 0000
    结果:0010 0000 0000 0000 0000 0000 0000 0000 -----(1073741823)

你可能感兴趣的:(JS中的位移运算)