所以,我知道Ada提供了两个余数运算符rem
和mod
,但它们之间究竟有什么区别?我能够找到this,但我不确定我是否完全掌握了差异。
答案 0 :(得分:5)
如果A mod B
为非负且A rem B
为正数,则A
与B
之间没有区别。如果A
为负数且B
为正数,mod
会为您提供真正的数学模运算;因此,例如,如果B为5,则A mod 5
的结果为A rem 5
和A
的结果:
A = -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8
A mod 5 = 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3
A rem 5 = 0 -4 -3 -2 -1 0 -4 -3 -2 -1 0 1 2 3 4 0 1 2 3
请注意A mod 5
结果中的模式。
rem
对应于%
运算符在C风格语言中的工作方式(但显然不是Python或Ruby)。某些处理器可能会更快。如果您必须处理A
的负值,我的预感是mod
更有可能是有用的,但rem
也可能有一些用途。我认为mod
或rem
使用右侧操作数为负值并没有多大用处,所以我不会过多担心这个定义。
答案 1 :(得分:2)
根据LRM,不同之处在于操作数的符号与结果相关联。
整数除法和余数由关系定义 A =(A / B)* B +(A rem B) 其中(A rem B)的符号为A,绝对值小于B的绝对值。整数除法满足同一性
(-A)/B = -(A/B) = A/(-B)
模运算的结果是(A mod B)具有B的符号并且绝对值小于B的绝对值;另外,对于某个整数值N,该结果必须满足关系
A = B*N + (A mod B)