为什么这个python 3语句使用按位或代替“或”? [重复]

问题描述 投票:2回答:3

这个问题在这里已有答案:

下面我发现这个python代码是problem statement over here的一部分:

除了两个整数而不使用乘法,除法和mod运算符给出两个整数说a和b。在不使用乘法,除法和mod运算符的情况下除以b之后找到商。

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

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

python bitwise-operators bitwise-xor
3个回答
4
投票

^是一个异或,但Python没有逻辑异或。这段代码充分利用了True == 1False == 0这样的事实,即使用bit-wise exclusive或具有相同的效果。 (例如,True ^ False == 1 ^ 0 == 1 == True。)

使用常规短路andor,然后测试(带有多余的括号)看起来像

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

-1
投票

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


-1
投票

它的工作原理是因为它不是一个按位OR运算符,而是一个按位XOR运算符。看看Python documentation on bitwise operators

来自Wikipedia

独占或独占析取是一种逻辑操作,仅当输入不同时才输出true(一个为真,另一个为假)。

© www.soinside.com 2019 - 2024. All rights reserved.