位运算,实际就是将数字转换为二进制来进行计算,先来看看其运算规则。 位运算符号的优先级:~ ,& ,^, | 一、与运算 奇偶数的判断:整数类型(int)A A&1==0 偶数 A&1==1 奇数 清零:与0想与 取一个数中的指定位:如10101101要取后四位,只需与00001111相与 二、或运算 常用来使一个数据的某些位变为1 例:将X=10100000的低4位变1 ,用X | 0000 1111 = 1010 1111即可得到。 三、异或运算 性质:交换律(a^b=b^a),结合律( (a^b)^c=a^(b^c) ), 对于任何数x都有x^x=0、x^0=x 自反性:a^b^b=a^0=a 可用来交换两个变量的值 >>> A=1 >>> B=2 >>> A=A^B >>> B=B^A >>> A=A^B >>> print(A,B) 2 1 超星学习通里有一道题:将1-1000放到一个容量为1001的数组里,只有唯一一个元素的值重复,其他数都只出现一次。数组中的每个数都只能访问一次,且不能用辅助存储空间,请设计一个算法实现。 解法:将所有的数全部异或,即1^2^3…^1000,得到的结果就是重复数。 四、取反(按位翻转) 方法: 将二进制数+1之后乘以-1,x的按位翻转是-(x+1)。注意,按位运算符是单目运算符。1+~4是正确的,5~3就不对了。 举例: ~7,解法:7的二进制是111, -(111+1)=-1000(二进制)=-8(十进制)。 ~-3,解法: - (-11+1)=100 五、移位运算 六、复合赋值运算符 位运算符可以与赋值运算符相结合,成为新的运算符,如下: 规则补充: 如果两个不同长度的数进行位运算,系统会将两个数的右端对齐,进行位运算。 |
|