位操作符

先引用一段:位操作符作用于最基本的层次上,即按内存中表示数值的位来操作数值。ECMAScript中的所有数值都以IEEE-754 64位格式存储,但是位操作符并不直接操作64位的值,而是先将64位的值转换成32位的整数,然后执行操作,最后再将结果转换回64位,对于开发人员来说,64位存储格式是透明的,则该过程就像是只存在32位的整数。对于有符号的整数,32位的前31位表示整数的值,第32位用于数值的符号:0表示整数,1表示负数
负数同样以二进制码存储,但是用的格式是二进制补码
例如求-9的二进制码:
1、求该数值的绝对值(9)的二进制码:
0000 0000 0000 1001
2、求二进制反码(0和1互换):
1111 1111 1111 0110
3、反码加1得到即-9的二进制码:
1111 1111 1111 0111 。
位操作符:
1、按位非(~)(一个操作数)
返回数值的反码。举例:
~9 的二进制码为:1111 1111 1111 0110;即值为:-10。
按位非操作本质是:操作数的负值减一。
2、按位与(&)(两个操作数,将两个数值的每一位对齐,都为1时取1,其他情况均为0)。
3、按位或(|)(两个操作数,将两个数值的每一位对齐,都为0时取0,其他情况均为1)。
4、按位异或(^)(两个操作数,将两个数值的每一位对齐,相同时取0,不同时取1)。
5、左移(<<)(左移不会影响操作数的符号位)
将数值所有位向左移动指定的位数,以0来填充空位
例(9<<2):
0000 0000 0000 1001
0000 0000 0010 0100
得到值为:36。
例(-9<<2):
1111 1111 1111 0111
1111 1111 1101 1100
(可以根据该补码反向推导(先减1)得出
1111 1111 1101 1011,再得其反码为
0000 0000 0010 0100,即其绝对值为36。原值为-36

得到值为:-36。
6、有符号的右移(>>)
将数值向右移动指定的位数,但保留符号位且用符号位的值来填充所有空位,有符号的右移与左移正好相反。
例(9>>2):
0000 0000 0000 1001
0000 0000 0000 0010
得到:2。
例(-9>>2):
1111 1111 1111 0111
1111 1111 1111 1101
(根据补码反向推导(先减一)得到:
1111 1111 1111 1100,再取其反码得:
0000 0000 0000 0011,即其绝对值为3,则原值为-3)
得到:-3。
7、无符号右移(>>>)
该操作符将所有位向右移动,以0来填充空位。对正数来说,无符号右移的结果与有符号右移结果相同。对于负数,情况不同:
无符号右移操作符会把负数的二进制码当成正数的二进制码,因为负数是以其绝对值的二进制补码形式表示,所以一般结果都非常大。
例如(-9>>>2,这里以32位全部显示):
1111 1111 1111 1111 1111 1111 1111 0111
0011 1111 1111 1111 1111 1111 1111 1101
这个对应十进制数值为:1073741821。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值