当前位置: 首页 > 知识库问答 >
问题:

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

司徒瀚
2023-03-14

我的朋友说“mod”和“rements”之间有区别。

如果是的话,C和C的区别是什么?'%'在C中是不是表示mod或rem?

共有3个答案

刘和昶
2023-03-14

余数的符号与可除数相同,模的符号与除数相同。

余数只是两个整数之间的算术除法后的剩余部分,而模是余数和除数的和(当它们是相反符号时),以及算术除法后的剩余部分(当余数和除数都是相同符号时)。

余数示例:

10%3=1[此处可除为10,带正号,因此结果也将带正号]

-10%3=-1[这里可除的是负符号的-10,因此结果也将是负符号的]

10%-3=1[此处可除数为10,带正号,因此结果也将带正号]

-10% -3 = -1[这里可整除的是-10,它是负符号的,所以结果也会是负符号的]

模量示例:

5%3=2[此处可除数为5,带正号,因此余数也将带正号,除数也带正号。由于余数和除数具有相同的符号,因此结果将与余数相同]

-5%3=1[这里可除的是负符号的-5,因此余数也将是负符号的,而除数是正符号的。由于余数和除数都是符号相反的,因此结果将是余数和除数的和-23=1]

5%-3=-1[此处可除数为5,带正号,因此余数也将带正号,而除数带负号。由于余数和除数都具有相反的符号,因此结果将是余数和除数2-3=-1之和]

-5%-3=-2[这里可除的是负符号的-5,因此余数也将是负符号的,除数也将是负符号的。由于余数和除数的符号相同,结果将与余数相同]

我希望这将清楚地区分余数和模数。

邬承悦
2023-03-14

'%'在C中是不是表示mod或rem?

在C语言中,%是余数1

..., /运算符的结果是丢弃任何分数部分的代数商。。。(这通常称为“向零截断”。)C11dr§6.5.5 6

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

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

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

C不定义"mod"也不定义"模"运算符/函数,诸如在欧氏除法中使用的整数模函数或其他模函数。

C定义余数。

让我们将每个%运算符的“余数”与欧几里德“mod”进行比较。

a为负时,"Euclides mod"不同于C的a%b操作。

 // a % b, the remainder after an integer division that truncates toward 0.
 7 %  3 -->  1  
 7 % -3 -->  1  
-7 %  3 --> -1  
-7 % -3 --> -1   

欧几里得除法中的“模”或模。结果始终为0或正。

 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”讨论没有什么关系。

[编辑Dec 2020]

对于那些在所有情况下都想要正确功能的人,一种改进的模欧几里德(),1)检测mod(x,0),2)模欧几里德2(INT\u MIN,-1)的良好且无UB结果。受4种不同的模实现的启发,具有完全定义的行为。

int modulo_Euclidean2(int a, int b) {
  if (b == 0) TBD_Code(); // perhaps return -1 to indicate failure?
  if (b == -1) return 0; // This test needed to prevent UB of `INT_MIN % -1`.
  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;
}

1在C99之前,C对%的定义仍然是除法的余数,然而那时/允许负商向下取整,而不是“向零截断”。看看为什么在C89中整数除法会得到不同的值?。因此,对于某些C99之前的编译%代码可以像欧几里得除法“mod”一样工作。上面的模欧几里德()也将与这个替代的旧式余数一起使用。

阎英朗
2023-03-14

模数和余数之间存在差异。例如:

-21mod43,因为-21 4 x 63

但是-21除以4得到-5,其余数为-1

对于正值,没有区别。

 类似资料:
  • 问题内容: 两者都意味着空间,但是有什么区别吗? 问题答案: 一个是不间断空间,另一个是常规空间。不间断的空格表示该行不应在该点处换行,就像它不会在一个单词的中间换行一样。 此外,正如斯文德(Svend)在其评论中指出的那样,不间断的空间不会崩溃。

  • 本文向大家介绍<%# %> 和 <% %> 有什么区别?相关面试题,主要包含被问及<%# %> 和 <% %> 有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 答:<%# %>表示绑定的数据源 <%%>是服务器端代码块  

  • 问题内容: 我有一个定义两个重载方法的类 显然它们是不同的,尤其是。 两者之间有什么区别? 如何调用第一个方法?我正在使用-这正确吗? 问题答案: 第一个函数是单个参数的函数,必须提供该参数,并且只能有效地采用value 。除null以外的任何值都不会编译。第二个函数不接受任何参数,传递给它也不会编译。

  • 问题内容: 在Python中,和之间有什么区别? 我猜想 load() 函数必须与文件对象一起使用(因此,我需要使用上下文管理器),而 load() 函数将文件路径作为字符串。这有点令人困惑。 字母“ s ” 代表 字符串 吗? 非常感谢你的回答! 问题答案: 是的,代表字符串。该函数不采用文件路径,而是将文件内容作为字符串。查看位于https://docs.python.org/2/librar

  • 问题内容: 考虑以下基础: 任何人只能活在堆里 阵列IS-A 和 IS-A 我发现自己很难回答这样一个简单的问题: JVM和 JVM内部 有什么区别吗?还是仅在“编译时”才有意义? 问题答案: 运行时有所不同。 是原始int值的数组。是一个“对象”数组,其中包含对Integer对象的引用。 最重要的实际差异:无法持有价值观。 但是我仍然很困惑:是否仅存储原始值?如果是这样,这是否意味着原始类型可以

  • 问题内容: 有人可以在OOP上下文中提供方法与功能的简单说明吗? 问题答案: 甲函数是一段代码由名字叫做。可以传递数据以对其进行操作(即参数),还可以选择返回数据(返回值)。传递给函数的所有数据都被显式传递。 甲方法是一段代码,由与对象相关联的名称叫。在大多数方面,它与功能相同,但有两个主要区别: 方法被隐式传递给调用该方法的对象。 方法能够对类中包含的数据进行操作(记住,对象是类的实例-类是定义