我在下面发现的这个 python 代码是问题陈述的一部分:
不使用乘法、除法和 mod 运算符将两个整数相除 给定 a 两个整数,说 a 和 b。不使用乘法、除法和 mod 运算符求 a 除以 b 后的商。
sign = (-1 if((dividend < 0) ^
(divisor < 0)) else 1);
我注意到如果您没有按位或运算符,代码将不起作用。为什么需要“按位或”而不是逻辑“或”运算符?
我在下面发现的这个 python 代码是问题陈述的一部分:
不使用乘法、除法和 mod 运算符将两个整数相除 给定 a 两个整数,说 a 和 b。不使用乘法、除法和 mod 运算符求 a 除以 b 后的商。
sign = (-1 if((dividend < 0) ^
(divisor < 0)) else 1);
我注意到如果您没有按位或运算符,代码将不起作用。为什么需要“按位或”而不是逻辑“或”运算符?
^
是异或,但 Python 没有逻辑异或。此代码利用了这样一个事实,True == 1
即False == 0
使用按位异或具有相同的效果。(例如,True ^ False == 1 ^ 0 == 1 == True
。)
使用常规短路and
and or
,然后测试(带有冗余括号)看起来像
sign = -1 if (dividend < 0 and divisor > 0) or (dividend > 0 and divisor < 0) else 1
这是一个按位异或运算符。有关 XOR 的更多信息,请参见此处。
它之所以有效,是因为这不是按位 OR 运算符,而是按位 XOR 运算符。查看有关按位运算符的 Python 文档。
来自维基百科:
异或异或是一种逻辑运算,仅当输入不同时才输出真(一个为真,另一个为假)。