为什么Python3语句使用按位or而不是";或者“是什么?”;?

为什么Python3语句使用按位or而不是";或者“是什么?”;?,python,bitwise-operators,bitwise-xor,Python,Bitwise Operators,Bitwise Xor,下面的python代码是我在 不使用乘法、除法和mod运算符对两个整数进行除法 给定a,两个整数表示a和b。在不使用乘法、除法和mod运算符的情况下,求a除以b后的商 符号=(-1如果((股息

下面的python代码是我在

不使用乘法、除法和mod运算符对两个整数进行除法 给定a,两个整数表示a和b。在不使用乘法、除法和mod运算符的情况下,求a除以b后的商

符号=(-1如果((股息<0)^
(除数<0)或1);
我注意到,如果没有按位or运算符,代码就不能工作。为什么需要“按位or”而不是逻辑“or”运算符?

^
是异或,但Python没有逻辑异或。此代码利用了
True==1
False==0
这一事实,因此使用位异或具有相同的效果。(例如,
True^False==1^0==1==True

使用常规短路
,然后测试(带冗余括号)如下所示

sign = -1 if (dividend < 0 and divisor > 0) or (dividend > 0 and divisor < 0) else 1
sign=-1如果(被除数<0且除数>0)或(被除数>0且除数<0)否则为1

这是一个按位异或运算符。有关XOR的更多信息,请参阅

它之所以有效,是因为它不是按位OR运算符,而是按位XOR运算符。看看这本书

发件人:

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


^是XOR运算符,而不是OR运算符。在问题有一个好答案而不是其他答案时关闭该问题…逻辑排他OR无论如何都是无用的,因为您需要评估这两个部分,这不会短路。我没有说排他OR会短路;我刚才把
称为短路(而不是布尔运算,因为严格来说它们不是布尔运算符)。你的答案没问题。我只是注意到使用
xor
是没有用的,因为它与
^
是一样的。好的,c++11有
&&
,也就是说。。。
sign = -1 if (dividend < 0 and divisor > 0) or (dividend > 0 and divisor < 0) else 1