按位操作是对二进制的操作,按位操作一般用在标志位、快速运算等场合
按位操作符列表 | |||
---|---|---|---|
& | bitwise AND | 将 expression1 和 expression2 转换为 32 位无符号整数,并对整数参数的每一位执行布尔 AND 运算。 | |
<< | bitwise left shift | 将 expression1 和 shiftCount 转换为 32 位整数,并将 expression1 中的所有位向左移动由 shiftCount 转换所得到的整数指定的位数。 | |
~ | bitwise NOT | 将 expression 转换为一个 32 位带符号整数,然后按位对 1 求补。 | |
| | bitwise OR | 将 expression1 和 expression2 转换为 32 位无符号整数,并在 expression1 或expression2 的对应位为 1 的每个位的位置上放置 1。 | |
>> | bitwise right shift | 将 expression 和 shiftCount 转换为 32 位整数,并将 expression 中的所有位向右移动由 shiftCount 转换所得到的整数指定的位数。 | |
>>> | bitwise unsigned right shift | 此运算符与按位向右移位运算符 (>> ) 基本相同,只是此运算符不保留原始表达式的符号,因为左侧的位始终用 0 填充。 | |
^ | bitwise XOR | 将 expression1 和 expression2 转换为 32 位无符号整数,并在 expression1 或expression2 中对应位为 1(但不是在两者中均为 1)的每个位的位置上放置 1。 |
与操作符(&):
-
1101
& 1011
---------
1001
可以判断二进制的某个位上是不是为1,比如:
var a = 1<<2;//把1右移2位,二进制是:100
var b = 7;//二进制是:111
var c = b&a; //这里判断b这个数的二进制上的第3位上是不是1,如果为1 则c的值是 a ,二进制(100 )
左移操作符(<<):
x = 1 << 3 ;//相当于是:0001 向左移动3位,变成了:1000 (等于2的3次方 = 8)
左移操作符可以快速的做指数(升幂)操作,向左移动一位相当于指数+1:
比如:2<<4 就是2的5次方
右移操作符(>>):
二进制向右移动,相当于是降幂:
8>>2 :8的二进制:1000 向右移动2位:0010 变成了2
右移一位相当于是开平方:6>>1 等于 4
有个特殊的右移0位:相当于取整,5.3 >>0 等于5