以下我在problem statement over here中找到的以下python代码:
不使用乘法,除法和mod运算符将两个整数相除 给定两个整数,则说a和b。在不使用乘法,除法和mod运算符的情况下,将a除以b后即可找到商。
sign = (-1 if((dividend < 0) ^
(divisor < 0)) else 1);
我注意到,如果您没有按位运算符或运算符,该代码将不起作用。为什么需要“按位或”而不是逻辑“或”运算符?
答案 0 :(得分:4)
^
是排他性,但Python没有逻辑排他性OR。该代码利用了True == 1
和False == 0
的事实,因此使用按位异或具有相同的效果。 (例如,True ^ False == 1 ^ 0 == 1 == True
。)
使用常规的短路and
和or
,然后进行测试(使用多余的括号)
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。