二进制数简介
- 探索之前我们先复习一遍二进制中的基础知识概要
在计算机中,所有的数据和指令在底层都是以二进制数的形式存储和处理的。二进制数使用两个字符(0和1)来表示数字,每一位代表一个不同的幂次。对于二进制数 1010
来说:
加起来: + 0 + + 0 = 10
在JS中,二进制数可以通过前缀 0b
或 0B
来表示。例如:
将二进制数转位十进制
- 使用
Number
- 使用
parseInt
将十进位数转位二进制数
- 使用
toString
除了创建和转换二进制数外,JS还提供一些操作二进制数的方法。
位运算
- 位运算符是操作二进制数的方法
按位运算符会将其操作数转换为 32 位有符号整数,再执行运算
按位与 (&)
a & b
规则:两个1返回1,不同为0
按位或(|)
a | b
规则:对应位,存在一个1就是1,否则就是0
按位异或(^)
a ^ b
规则是:两个对应位不同返回1,否则是0
按位非(~)
~a
规则是:按位取反
使用补码表示法
-
在JS中会将操作数转为32位整数,然后再对每一位进行取反操作。
如上我们用的例子
let a = 0b1101
转为32位整数为0000 0000 0000 0000 0000 0000 0000 1101
-
取反后为负数
1111 1111 1111 1111 1111 1111 1111 0010
-
要把负数补码转为负数原码。负数的补码是符号位不变,减1
-
补码表示为:
1111 1111 1111 1111 1111 1111 1111 0001
-
取反为:
1000 0000 0000 0000 0000 0000 0000 1110
故补码表示为其最后的结果结果
左移(<<)
a << b
规则为:将 a 的位数往左移 b 位数,右边空缺则补0
…0000 1101
…0000 0011
…0110 1000
左移赋值 (<<=)
左移简写,上面的例子使用 左移赋值简写的话是 a <<= 3
右移(>>)
a >> b
规则为:将 a 的位数往右移 b 位数,右边移出抛弃,左边空缺则补符号位
…0000 1101
…0000 0011
…0000 0001
无符号右移 (<<<)
a >>> b
规则是:区别于右移是,左边空缺的填充0
应用场景
使用位运算符的应用场景
标识符
例如 rollup
源码中,使用了左移运算符,创建唯一的按位操作友好的标识符。
权限管理
基础不牢,地动山摇