为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
幕布斯7119047 2019-07-05 13:34:05
“MOD”和“余数”有什么区别?我的朋友说,“国防部”和“剩余”是有区别的。如果是的话,C和C+的区别是什么?%在C中是指“mod”还是“rem”?
查看完整描述

3 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

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

在C中,%余数1.

.的结果/算子是带任意小数部分的代数商.(这通常被称为“向零截断”)。C11dr§6.5.5 6

的操作数%运算符应具有整数类型。C11dr§6.5.5 2

的结果/运算符是从第一个操作数除以第二个操作数的商;%运算符是余数..C11dr§6.5.5 5


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

C不定义“mod”,例如欧氏除法其他模块..“欧几里得模”与C的不同a%b操作时a是阴性的。

 // 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_Euclidean(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.1 2

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)它将参数值分解为整数部分和小数部分,每个部分具有与参数相同的类型和符号。这与这里的“mod”讨论没有什么关系,只是名字相似。


1在C99之前,C的定义%仍然是余数从组织,然而,那么/允许负商数四舍五入,而不是“向零截断”。看见为什么在C89中得到不同的整数除法值?..因此,通过一些C99前的编译,%代码的作用就像欧几里德除法“mod”一样。上述modulo_Euclidean()也会用这个老旧的余数。


查看完整回答
反对 回复 2019-07-05
?
互换的青春

TA贡献1797条经验 获得超6个赞

模,在模块算术中,如您所指,是算术除法后的剩馀值或剩余值。这通常称为余数。%在形式上是C/C+中的余数运算符。例子:

7 % 3 = 1  // dividend % divisor = remainder

剩下要讨论的是如何处理这个%操作的负输入。现代C和C+为此操作生成一个有符号余数值,其中结果的符号总是与股利投入相匹配。不考虑除数输入的符号。


查看完整回答
反对 回复 2019-07-05
  • 3 回答
  • 0 关注
  • 628 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信