“mod”和“remaining”之间有什么区别?

我的朋友说“mod”和“remaining”有区别。

如果是这样,C和C ++有什么不同? “%”是指C中的“mod”还是“rem”?

模数和余数是有区别的。 例如:

-21 mod 43因为-21 + 4 x 63

-21除以4得到-5 ,余数-1

对于积极的价值观,没有任何区别。

“%”是指C中的“mod”还是“rem”?

在C中, %是余数。

…, /运算符的结果是舍弃任何小数部分的代数商…(这通常被称为“截向零”)。C11dr第6.5.5节

%运算符的操作数应具有整数types。 C11dr§6.5.52

/运算符的结果是第一个操作数除以第二个操作数的商。 %运算符的结果是余数 … C11dr第6.5.5节5


“mod”和“余数”有什么区别?

C没有定义“mod”,比如欧几里得除法中使用的整数模函数或其他模 。 当a为负时,“欧几里得mod”与C的a%b操作不同。

  // a % b 7 % 3 --> 1 7 % -3 --> 1 -7 % 3 --> -1 -7 % -3 --> -1 

作为欧几里德划分

  7 modulo 3 --> 1 7 modulo -3 --> 1 -7 modulo 3 --> 2 -7 modulo -3 --> 2 

候选模数码:

 int modulo_Euclidian(int a, int b) { int m = a % b; if (m < 0) { // m += (b < 0) ? -b : b; // avoid this form: it is UB when b == INT_MIN m = (b < 0) ? m - b : m + b; } return m; } 

注意浮点数: double fmod(double x, double y)即使被称为“fmod”,它与欧几里得除法“mod”不一样,但类似于C整数余数:

fmod函数计算x/y的浮点余数。 C11dr§7.12.10.12

 fmod( 7, 3) --> 1.0 fmod( 7, -3) --> 1.0 fmod(-7, 3) --> -1.0 fmod(-7, -3) --> -1.0 

注意:C也有一个类似的命名函数double modf(double value, double *iptr) ,它将参数值分解为整数部分和小数部分,每个部分与参数具有相同的types和符号。

在math中,模运算的结果是欧几里得除法的余数。 但是,其他公约也是可能的。 计算机和计算器有各种存储和表示数字的方式; 因此它们对模运算的定义取决于编程语言和/或底层硬件。

  7 modulo 3 --> 1 7 modulo -3 --> -2 -7 modulo 3 --> 2 -7 modulo -3 --> -1