位运算是直接对整数的二进制进行的运算
运算符 | 运算 | 范例 |
---|---|---|
<< | 左移 | 3 << 2 = 12 --> 3*2*2=12 |
>> | 右移 | 3 >> 1 = 1 --> 3/2=1 |
>>> | 无符号右移 | 3 >>> 1 = 1 --> 3/2=1 |
& | 与运算 | 6 & 3 = 2 |
| | 或运算 | 6 |
^ | 异或运算 | 6 ^ 3 = 5 |
~ | 取反运算 | ~6 = -7 |
位运算符的细节
运算符 | 细节 |
---|---|
<< | 空位补0,被移除的高位丢弃,空缺位补0。 |
>> | 被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,空缺位补1。 |
>>> | 被移位二进制最高位无论是0或者是1,空缺位都用0补。 |
& | 二进制位进行&运算,只有1&1时结果是1,否则是0; |
| | 二进制位进行|运算,只有0|0时结果是0,否则是1; |
^ | 相同二进制位进行 ^ 运算,结果是0;1 ^ 1=0 , 0 ^ 0=0不相同二进制位 ^ 运算结果是1。1 ^ 0=1 , 0 ^ 1=1 |
~ | 正数取反,各二进制码按补码各位取反;负数取反,各二进制码按补码各位取反 |
以下三个运算均满足结合律,交换律
与(&)运算的特点:有0为0,全1为1
与运算&。与运算有以下性质。
1.一个数&1的结果就是取二进制的最末位,这可以用来判断一个数的奇偶性,二进制的最末位位0表示该数位偶数,最末位为1表示该数为奇数
0001 0101 & 0000 0001 = 0000 001
2.置位归零:使一个二进制数中的某一位/某几位归零,而其余数位不受影响。将欲归零的数位应置0,其余数位置1
0001 0101 & 1111 1111 = 0001 0101
3.巧用取模:因为位运算比%(取模)运算快,所以可对一下代码进行优化
x=x%2; // 可以进行优化 x=x&1;
4.取一个数中指定位:举例:取1010 1110的低四位,则可通过以下运算得到
1010 1110 & 0000 1111 = 0000 1110
或(|)运算的特点:有1为1,全0为0
或运算|。或运算有以下性质。
1.对一个数据的某些位置 1,将1010 0000的低四位置1
1010 0000 | 0000 1111 = 1010 1111
异或(^)运算的特点:同为0,异为1
异或运算⊕。异或运算有以下性质。
1.任何数和0做异或运算,结果仍然是原来的数,即 a⊕ 0=a。
2.任何数和其自身做异或运算,结果是0,即 a⊕ a=0。
3.异或运算满足交换律和结合律,即 a⊕b⊕a = b⊕a⊕a = b⊕(a⊕a)=b⊕ 0=b。