我在python上编写了一个原型代码,以查看逻辑是否有效,然后在c ++中对其进行了编码。但是由于某种原因,python版本和c ++版本返回不同的结果。我不知道为什么会这样。
我反复研究了这个特定的逻辑方程式,并确保它们完全相同,但不包括(or,||)和(and,&&&)之类的差异。
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))))
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
答案 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。