为什么同一个逻辑方程 return 2 在 python 和 c++ 中得到不同的结果?

Why does the same logical equation return 2 different results in python and c++?

我在 python 上做了一个原型代码,看看逻辑是否有效,后来用 C++ 编写了代码。但是由于某些原因 python 版本和 c++ 版本 return 不同的结果。我无法弄清楚为什么会这样。

我多次检查这个特定的逻辑等式,并确保它们完全相同,不包括 (or,||) 和 (and,&&) 等差异。

python

i = -6
j = -5
pos_i = 0
pos_j = 0
print((i%2==0)and((((i/2)%2==0)and(j%2==0))or(((i/2)%2==1)and(j%2==1))))

c++

int i = -6;
int j = -5;
int pos_i = 0;
int pos_j = 0;
cout << (i%2==0)&&((((i/2)%2==0)&&(j%2==0))||(((i/2)%2==1)&&(j%2==1)));

预计:-

python===> 正确

c++=====> 1

实际:-

python===> 正确

c++=====> 0

因为在 c++ 中 i / 2 变成一个整数,而在 python 中它变成一个浮点数。从那里你正在做具有不同价值的逻辑。如果你想要同样的你应该使用

    print((i%2==0)and((((i//2)%2==0)and(j%2==0))or(((i//2)%2==1)and(j%2==1))))

另一个关于整数除法的答案是正确的,但这不是这里的问题。此处发生的唯一除法是 -6 除以 2,因此使用整数除法运算符 // 不会改变结果。

正确答案是模运算符在 Python 和 C++ 中的工作方式不同:Link.

Unlike C or C++, Python's modulo operator (%) always return a number having the same sign as the denominator (divisor).

-1 % 2 在 C++ 中将产生 -1,而不是您期望的 1。