Python和C++;模数 我正在学习C++,在编写一个小程序时,我发现了一些奇怪的东西。关于模量: C++代码< /P> cout << -325 - (-325 % 100) << endl; // -300 cout << 325 - (325 % 100); // 300

Python和C++;模数 我正在学习C++,在编写一个小程序时,我发现了一些奇怪的东西。关于模量: C++代码< /P> cout << -325 - (-325 % 100) << endl; // -300 cout << 325 - (325 % 100); // 300,python,c++,Python,C++,有人能给我解释一下吗?Thq看起来phyton不接受负模量结果,因此将100与-25相加 打印(-325-(-325%100)) 这有点超出了我的专业知识,但其python可能遵循余数计算,即:a+b*[a/b]是[]操作。因此: a = -325 b = 100 print(a - b*math.floor(a/b)) print(math.floor(-3.25)) print(-325 -(a - b*math.floor(a/b))) 结果: 75 -4 -400 我有点惊讶C++没

有人能给我解释一下吗?Thq

看起来phyton不接受负模量结果,因此将100与-25相加

打印(-325-(-325%100))


这有点超出了我的专业知识,但其python可能遵循余数计算,即:
a+b*[a/b]
[]
操作。因此:

a = -325
b = 100
print(a - b*math.floor(a/b))
print(math.floor(-3.25))
print(-325 -(a - b*math.floor(a/b)))
结果:

75
-4
-400
我有点惊讶C++没有返回相同的(但是我对这个主题还不够了解)。p> <> > >编辑:< /St>。本主题快速搜索,并提到了为什么C++,特别是C++ 11,将底层操作总是指向0的原因。我引述:

在C++11之前,如果整数除法的任一操作数为 否,编译器可以自由向上或向下取整!例如,-5/ 2可以计算为-3或-2,具体取决于编译器的方式 轮。然而,大多数现代编译器都向0(so-5/2)截断 将等于-2)。C++11规范将此更改为显式 定义整数除法应始终向0(或put)截断 更简单地说,小数部分被删除)

同样在C++11之前,如果模运算符的任一操作数为 负值,模量的结果可以是负值,也可以是负值 肯定!例如,-5%2可以计算为1或-1最新版本 C++11规范加强了这一点,使%b始终解析为 a的符号。

关于Python,您可以查看以下文档:

将两个(非复数)数字作为参数,并返回一对 使用整数时由商和余数组成的数 分部。对于混合操作数类型,二进制算术规则 操作员申请。对于整数,结果与(a//b,a%)相同 b) 。对于浮点数,结果是(q,a%b),其中q是 通常为数学。楼层(a/b),但可能小于1。在任何情况下q* b+a%b非常接近a,如果a%b不为零,则具有相同的值 签名为b,0=0。如果时钟现在显示10,它会显示什么 200小时前<代码>-190%12==2有用<代码>-190%12==-10是一个错误 等着咬


我对它并不太了解,但是既然你在学习C++,我想告诉你一些我个人的经验,如果你在用C++编写一个程序,你使用的是模运算,你总是想要+VE mod,你应该做这样的事情——

a = b%m;
if(a<0) a += m;
a=b%m;

如果(a可能帮助您理解C++中发生的事情。我建议您单独尝试例如<代码> -325% 100 来查看它所做的。密切注意节末的注释。不同的语言解释%操作符的不同。在Python,<代码>一% b>代码>总是具有与代码> b>代码>相同的符号。它给出相同的结果。是的,我找到了原因。我会编辑答案。
a = b%m;
if(a<0) a += m;