为什么同一个逻辑方程在python和c++中返回两个不同的结果

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

本文关键字:两个 结果 返回 同一个 方程 c++ python 为什么      更新时间:2023-10-16

我在python上制作了一个原型代码,看看逻辑是否有效,后来用c++进行了编码。但由于某些原因,python版本和c++版本返回的结果不同。我不明白为什么会这样。

我反复研究了这个特定的逻辑方程,并确保它们完全相同,排除了(或,||(和(和,&&(等差异。

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。

与C或C++不同,Python的模运算符(%(总是返回一个与分母(除数(具有相同符号的数字。

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