js实现位移
左位移运算符(<<)
左位移运算符将数字的二进制表示向左移动指定的位数,右侧用0填充。每左移一位相当于乘以2。

let num = 5; // 二进制 0101
let result = num << 2; // 二进制 010100 (20)
console.log(result); // 输出 20
右位移运算符(>>)
右位移运算符将数字的二进制表示向右移动指定的位数,左侧用符号位填充。每右移一位相当于除以2并向下取整。

let num = -20; // 二进制 11111111111111111111111111101100
let result = num >> 2; // 二进制 11111111111111111111111111111011 (-5)
console.log(result); // 输出 -5
无符号右位移运算符(>>>)
无符号右位移运算符将数字的二进制表示向右移动指定的位数,左侧用0填充。对于正数,结果与>>相同;对于负数,结果会变成很大的正数。
let num = -20; // 二进制 11111111111111111111111111101100
let result = num >>> 2; // 二进制 00111111111111111111111111111011 (1073741819)
console.log(result); // 输出 1073741819
应用场景
- 快速乘除2的幂次方 左移n位相当于乘以2^n,右移n位相当于除以2^n。
let a = 10;
let multiply = a << 3; // 10 * 8 = 80
let divide = a >> 1; // 10 / 2 = 5
- 颜色值操作 位移常用于处理RGB颜色值。
let red = 0xFF0000;
let green = 0x00FF00;
let blue = 0x0000FF;
let color = (red >>> 16) + ',' + (green >>> 8) + ',' + blue;
console.log(color); // 输出 "255,255,255"
- 权限控制 位移常用于权限位掩码。
const READ = 1 << 0; // 0001
const WRITE = 1 << 1; // 0010
const EXECUTE = 1 << 2; // 0100
let permissions = READ | WRITE; // 0011
let hasWrite = (permissions & WRITE) === WRITE; // true
注意事项
- 位移操作会将操作数转换为32位有符号整数,超出32位的部分会被丢弃。
- 无符号右移(>>>)会将结果转换为无符号整数。
- 对于大数(大于2^31-1),位移可能产生意外结果。
let bigNum = 2147483648; // 2^31
console.log(bigNum << 1); // 输出 0,因为溢出






