这个问题在这里已有答案:
下面我发现这个python代码是problem statement over here的一部分:
除了两个整数而不使用乘法,除法和mod运算符给出两个整数说a和b。在不使用乘法,除法和mod运算符的情况下除以b之后找到商。
sign = (-1 if((dividend < 0) ^
(divisor < 0)) else 1);
我注意到如果你没有按位或运算符,代码不起作用。为什么需要“按位或”而不是逻辑“或”运算符?
^
是一个异或,但Python没有逻辑异或。这段代码充分利用了True == 1
和False == 0
这样的事实,即使用bit-wise exclusive或具有相同的效果。 (例如,True ^ False == 1 ^ 0 == 1 == True
。)
使用常规短路and
和or
,然后测试(带有多余的括号)看起来像
sign = -1 if (dividend < 0 and divisor > 0) or (dividend > 0 and divisor < 0) else 1
这是一个按位XOR运算符。有关XOR的更多信息,请参阅here。
它的工作原理是因为它不是一个按位OR运算符,而是一个按位XOR运算符。看看Python documentation on bitwise operators。
来自Wikipedia:
独占或独占析取是一种逻辑操作,仅当输入不同时才输出true(一个为真,另一个为假)。