位运算符 的详细说明

按位与运算符(&)

运算符 & 对它 的整形参数逐位执行布尔and操作。只有两个运算符中相应位都为1,那么结果中的这一位才为1.例如  0x1234  &  0x00f  f=  0x0034;

按位或运算符( | )

运算符 | 对它 的整形参数逐位执行布尔  or 操作。只有其中一个运算数中的相应位为1或者两个运算符中相应位都为1,那么结果中的这一位为1.例如  

9 |10=11.

按位异或运算符(  ^  )

运算符  ^  对它 的整形参数逐位执行布尔异或操作。异或是指第一个运算数是true 或者第二个运算数是true,但两者不能同时为true。如果两个运算数中只有一个数的相应位为1(但不能同时为1),那么结果中的相应的这一位 就为1 。例如:9^10=3.

按位非运算符(~)

运算符 ~ 是一个一元运算符,它位于一个整型参数之前,它将运算数 所有位取反。根据javascript中带符号的整数的表示方法,对一个值使用  ~  运算符相当于改变它的符号并且减1.例如~0x0f   =0xfffffff0.

左移运算符(<<)

运算符(<<)左移第一个数中的所有位,移动的位数由第二个运算数指定,移动的位数应该是一个0到31的整数。例如,在表达式a<<1中,a的第一位变成了它的第二位,啊的第二位变成了它的第三位,以此类推。新的第一位用0来补充,舍弃第32位的值。将一个值左移1位相当于对它乘以2

负数左移也是一样的,可以用负数的补码来验证(注意:在转换反码的时候符号位不要变)

(这里用单字节演示)

比如   -5(十进制)--->(1000 0101)(原码)---->(1111 1010)(反码)------->(1111 1011)(补码)

左移  1  位得到的结果为     (1111 0110)(补码)---------(减1)-->(1111 0101)(反码)------->(1000 1010)(原码  -10)


带符号的右移运算符(>>)

运算符(>>) 右移第一个运算数中的所有位,移动的位数由第二个运算数指定,移动的位数应该是一个0到31的整数。舍弃右边溢出的位,填补左边的位由原运算数的符号位决定,以便保持结果的符号与原操作数一致。如果第一个运算数是正的,就用0填补结果的高位;如果第一个运算数是负的,就用1填补结果的高位.。将一个值右移1位,相当于用2除它(丢弃余数),右移2位,相当于用4除以它,以此类推   。例如:7>>1=3    -7>>1=-4(自己验证)

例如(还是以单字节说明)

-10>>2    -10-------(1111 0101)(补码)-----右移两位--->>(1111 1101)------(减1)--->(1111 1100)---(反码)--->(1000 0011)(-3)


无符号的右移运算符(>>>)

运算符>>> 和运算符 >> 一样,只是从左边移入总是以0补充,与原运算符的符号无关。例如  -1>>4 =-1  -1>>>4=268435455

以4个字节为例:  -1:(11111111......11111111)--------(右移4位)---->(0000 1111 1111....1111)=2的28次方-1

以单字节为例:-1(1111 1111)--------(右移4位)---->(0000 1111)=2的5次方-1


原码:将一个整数,转换成二进制,就是其原码。如单字节的5的原码为:0000 0101-5的原码为1000 0101

反码:正数的反码就是其原码;负数的反码是将原码中,除符号位以外,每一位取反。如单字节的5的反码为:0000 0101-5的原码为1111 1010

补码:正数的补码就是其原码;负数的反码+1就是补码。如单字节的5的补码为:0000 0101-5的原码为1111 1011





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值