为什么同一个逻辑方程在python和c++中返回两个不同的结果
Why does the same logical equation return 2 different results in python and c++?
我在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。
相关文章:
- 如何返回一个类的两个对象相加的结果
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 这两个代码片段相似,但显示的结果不同
- oStream 不打印添加两个 valarray 的结果(使用运算符重载)
- 为什么 Clang 和 GCC 中两个无符号整数之和的结果类型不同
- 我有两棵二叉树.我想在不更改输入树的情况下深度复制两个二叉树的结果
- 为什么同一个逻辑方程在python和c++中返回两个不同的结果
- 为什么这两个相似的代码计算行列式的结果不同?
- 如何通过键和值以及在C 中的结果映射中比较两个地图?我们有任何STL API吗?
- 如何乘以两个值并原子存储结果
- *char数组到字符串(两次运行代码和两个不同的结果)
- 运算符的两个不同结果 - 在 c++11 中
- 在发布版本中划分两个双精度的结果错误
- 两个结果的std :: chrono :: high_resolution_clock :: now()给出了〜270n
- C++:两个单独的函数在嵌套时返回不同的结果?
- 警告:用两个参数构造函数返回对象时,表达结果未使用
- 随机洗牌似乎会产生相同的结果,但仅在前两个实例中产生相同的结果.我如何避免这种情况
- 运算符*=来自两个实例(矩阵),结果不好
- 在 GCC 4.6 和 4.7 上模板模板扣除的两个不同结果
- 在将两个结果行写入文件之前比较用fprintf生成的结果行