为什么相同的逻辑方程式在python和c ++中返回2个不同的结果?

时间:2019-10-28 16:39:59

标签: python c++ compare logical-operators

我在python上编写了一个原型代码,以查看逻辑是否有效,然后在c ++中对其进行了编码。但是由于某种原因,python版本和c ++版本返回不同的结果。我不知道为什么会这样。

我反复研究了这个特定的逻辑方程式,并确保它们完全相同,但不包括(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

2 个答案:

答案 0 :(得分:2)

因为在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))))

答案 1 :(得分:0)

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

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

  

与C或C ++不同,Python的模运算符(%)始终返回与分母(除数)具有相同符号的数字。

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