为什么此python 3语句使用按位或而不是“或”?

时间:2019-02-19 20:22:08

标签: python bitwise-operators bitwise-xor

以下我在problem statement over here中找到的以下python代码:

不使用乘法,除法和mod运算符将两个整数相除 给定两个整数,则说a和b。在不使用乘法,除法和mod运算符的情况下,将a除以b后即可找到商。

sign = (-1 if((dividend < 0) ^  
                  (divisor < 0)) else 1); 

我注意到,如果您没有按位运算符或运算符,该代码将不起作用。为什么需要“按位或”而不是逻辑“或”运算符?

3 个答案:

答案 0 :(得分:4)

^排他性,但Python没有逻辑排他性OR。该代码利用了True == 1False == 0的事实,因此使用按位异或具有相同的效果。 (例如,True ^ False == 1 ^ 0 == 1 == True。)

使用常规的短路andor,然后进行测试(使用多余的括号)

sign = -1 if (dividend < 0 and divisor > 0) or (dividend > 0 and divisor < 0) else 1

答案 1 :(得分:-1)

这是按位XOR运算符。有关XOR的更多信息,请参见here

答案 2 :(得分:-1)

之所以起作用,是因为它不是按位或运算符,而是按位XOR运算符。签出Python documentation on bitwise operators

来自Wikipedia

  

“异或”或“异或”是一种逻辑运算,仅当输入不同(一个为true,另一个为false)时才输出true。