移位运算符(<<、>>和>>>)

“<<”运算符

  • “<<”运算符执行左移位运算。在移位运算过程中,符号位始终保持不变。如果右侧空出位置,则自动填充为 0;超出 32 位的值,则自动丢弃。
  • 运算 5 << 2
第一个数的位值左移2位运算结果
01
00
11
00
10

把数字 5(二进制为101) 向左移动 2 位得出(二级制10100)转换成10进制为20

// 计算2的n次方
var n = 3
console.log(1<<n) // 2的3次方 = 8

“>>”运算符

  • “>>”运算符执行有符号右移位运算。与左移运算操作相反,它把 32 位数字中的所有有效位整体右移,再使用符号位的值填充空位。移动过程中超出的值将被丢弃。
  • 运算 5 >> 2
第一个数的位值右移2位运算结果
00
00
10
00
11

把数字 5(二进制为101) 向右移动 2 位得出(二级制1)转换成10进制为1

  • 运算 -1000 >> 8
    用算式进行演示,如图所示。当符号位值为 1 时,则有效位左侧的空位全部使用 1 进行填充。
//取半: >>
var num2 = 300
console.log(num2 >> 1) // 150
var num3 = 321
console.log(num3 >> 1) // 160 会舍去小数

“>>>”运算符

  • “>>>”运算符执行无符号右移位运算。它把无符号的 32 位整数所有数位整体右移。对于无符号数或正数右移运算,无符号右移与有符号右移运算的结果是相同的。

– 在正数情况下,>> 和 >>>返回是相同的

console.log(1000 >> 8);  //返回值3
console.log(1000 >>> 8);  //返回值3

– 在负的情况下不同的是:
对于负数来说,无符号右移将使用 0 来填充所有的空位,同时会把负数作为正数来处理,所得结果会非常大所以,使用无符号右移运算符时要特别小心,避免意外错误。

console.log(-1000 >> 8);  //返回值 -4
console.log(-1000 >>> 8);  //返回值 16777212
* -5 >>> 2
* -5无符号右移2位
* -5的原码:10000000 00000000 00000000 00000101
* -5的补码:11111111 11111111 11111111 11111010
* 右移两位:   11111111 11111111 11111111 11111010
* 高位补0: 00111111 11111111 11111111 111110
* 求得10进制为1073741822

>>:带符号右移。正数右移高位补0,负数右移高位补1

>>>:无符号右移。无论是正数还是负数,高位通通补0

  • 17
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值