前言
位运算符是在数字底层(即表示数字的 32 个数位)进行操作的,在 ECMAScript 中,所有整数字面量默认都是有符号整数
其对2^31进行了均摊,使正数占差不多2^30,负数差不多2^30
最高位32位表示符号,其中正为0,负为1
数值范围从 -2147483648 到 2147483647。之所以正数要比负数小1,是因为正数要包括0
正负运算为:取反加1
左移
符号:<<
操作:十进制转32进制后整体向左移动指定位数,空出的位置补0
示例
00000000000000000000000000011001
<<3
00000000000000000000000011001000
右移
有符号:>>
无符号:>>>
操作:十进制转32进制后整体向右移动指定位数,有符号对空出的位置补符号位,无符号则补0
按位非(取反码)
符号:~
操作:将32位上的0和1互换,等价于取负数后-1
示例
00000000000000000000000000011001
~
11111111111111111111111111100110 按位取反
1000000000000000000000000011001 保留符号位取反
1000000000000000000000000011010 末位加1
按位与
符号:&
操作:32位上同为1保留,其余记0
示例
0000 0000 0000 0000 0000 0000 0001 1001
&
0000 0000 0000 0000 0000 0000 0000 0011
=
0000 0000 0000 0000 0000 0000 0000 0001
按位或
符号:|
操作:32位上有1保留,其余记0
示例
0000 0000 0000 0000 0000 0000 0001 1001
|
0000 0000 0000 0000 0000 0000 0000 0011
=
0000 0000 0000 0000 0000 0000 0001 1011
按位异或
符号:^
操作:32位同为0,异为1(无进位相加)
示例
0000 0000 0000 0000 0000 0000 0001 1001
^
0000 0000 0000 0000 0000 0000 0000 0011
=
0000 0000 0000 0000 0000 0000 0001 1010
位图