JavaScript 中一些不常见的运算符号(三分钟看完)
最近在做一些算法题,有些优雅的表述中总有那么一两个不相熟的运算符,今晚趁着还有点工夫放松扫一下。
一、求幂 ()**
求幂运算符(**
)返回将第一个操作数加到第二个操作数的幂的后果。它等效于 Math.pow
,不同之处在于它也承受 BigInts 作为操作数。
示例:
console.log(3 ** 4);
// expected output: 81
二、左移
左移操作符 (<<
) 将第一个操作数向左挪动指定位数,右边超出的位数将会被革除,左边将会补零。
9 << 3; // 72
// 9 * 2³ = 9 * 8 = 72
三、按位与
按位与运算符 (&
) 在每个位上返回 1
,这两个操作数对应的位都是 1
const a = 5; // 00000000000000000000000000000101
const b = 3; // 00000000000000000000000000000011
console.log(a & b); // 00000000000000000000000000000001
转成 32 位数,而后顺次进行 & 操作进行比对,雷同则为 1 或者 0 不同则为 0
四、按位或
雷同为 0,不同为 1
const a = 5; // 00000000000000000000000000000101
const b = 3; // 00000000000000000000000000000011
console.log(a ^ b); // 00000000000000000000000000000110
// expected output: 6
五、右移 (>>)
右移操作符 (>>
) 是将一个操作数按指定挪动的位数向右挪动,左边移出位被抛弃,右边移出的空位补符号位(最右边那位)。
const a = 5; // 00000000000000000000000000000101
const b = 2; // 00000000000000000000000000000010
const c = -5; // -00000000000000000000000000000101
console.log(a >> b); // 00000000000000000000000000000001
// expected output: 1
console.log(c >> b); // -00000000000000000000000000000010
// expected output: -2
六、无符号右移
将第一个操作数右移指定位数。多余的右移位被抛弃。零位从右边移入。符号位变为 0,因而后果总是非负的。与其余按位运算符不同,零填充右移返回一个无符号 32 位整数。
const a = 5; // 00000000000000000000000000000101
const b = 2; // 00000000000000000000000000000010
const c = -5; // -00000000000000000000000000000101
console.log(a >>> b); // 00000000000000000000000000000001
// expected output: 1
console.log(c >>> b); // 00111111111111111111111111111110
// expected output: 1073741822