繁体   English   中英

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

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

我在 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)));

预期的:-

蟒蛇===> 真

c++=====> 1

实际的:-

蟒蛇===> 真

c++=====> 0

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM