(一)python中的位运算
位运算即按位(bitwise)运算,python中的位运算符有&、|、^、~、>>、<<。具体的:
& 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0。注意如果原始数据不是二进制的需要先转化为二进制。后面其他位运算也是这样的,因为位只能取0或1。
| 按位或运算符:只要对应的两个二进位有一个为1时,结果位就为1,其他情况为0。
&、| 和and、or的区别:&、|在数值变量中它是位运算如果是逻辑变量则没有区别。
python中的布尔逻辑运算:and、or。如果and,or左右是布尔值则and的结果是:存在false则结果为false,都是true则结果为true。or的结果是:如果存在true则结果是true,如果全是false则结果是false。如果and、or左右不是布尔值而是具体值则and的结果是:如果结果是true则返回最后一个真值,如果结果是false则返回第一个false值。or的结果是:如果结果是true则返回第一个true值,如果结果是false则返回最后一个false值。(即左右都同true同false时则返回最后一个值)。
^ 按位异或运算符:当两对应的二进位相异时,结果为1 。
~ 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。~x 类似于 -(x+1)。why?当按位取反后二进制表示负值,负值的十进制结果是先取反再加1再取相反数,这里再取反不就是原始值x吗,然后加1取反即-(x+1)。故而 ~x==-(x+1)。
>> 右移动运算符:把>>左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数。
<< 左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。
(二)python中的位运算问题举例
问题1:不用加减乘除做加法。(选自《剑指offer》面试题65,P310)
解答:
def add(num1, num2):
while num2 != 0:
sum = num1 ^ num2
carry = (num1 & num2) << 1
num1 = sum
num2 = carry
return num1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
问题2: