2

我在下面发现的这个 python 代码是问题陈述的一部分:

不使用乘法、除法和 mod 运算符将两个整数相除 给定 a 两个整数,说 a 和 b。不使用乘法、除法和 mod 运算符求 a 除以 b 后的商。

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

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

4

3 回答 3

4

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

使用常规短路andand or,然后测试(带有冗余括号)看起来像

sign = -1 if (dividend < 0 and divisor > 0) or (dividend > 0 and divisor < 0) else 1
于 2019-02-19T20:26:05.613 回答
-1

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

于 2019-02-19T20:28:39.693 回答
-1

它之所以有效,是因为这不是按位 OR 运算符,而是按位 XOR 运算符。查看有关按位运算符的 Python 文档

来自维基百科

异或异或是一种逻辑运算,仅当输入不同时才输出真(一个为真,另一个为假)。

于 2019-02-19T20:29:00.813 回答