我的朋友说“mod”和“rements”之间有区别。
如果是的话,C和C的区别是什么?'%'在C中是不是表示mod或rem?
余数的符号与可除数相同,模的符号与除数相同。
余数只是两个整数之间的算术除法后的剩余部分,而模是余数和除数的和(当它们是相反符号时),以及算术除法后的剩余部分(当余数和除数都是相同符号时)。
余数示例:
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,因此余数也将是负符号的,除数也将是负符号的。由于余数和除数的符号相同,结果将与余数相同]
我希望这将清楚地区分余数和模数。
'%'在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”一样工作。上面的模欧几里德()
也将与这个替代的旧式余数一起使用。
模数和余数之间存在差异。例如:
-21
mod4
是3
,因为-21 4 x 6
是3
。
但是-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上下文中提供方法与功能的简单说明吗? 问题答案: 甲函数是一段代码由名字叫做。可以传递数据以对其进行操作(即参数),还可以选择返回数据(返回值)。传递给函数的所有数据都被显式传递。 甲方法是一段代码,由与对象相关联的名称叫。在大多数方面,它与功能相同,但有两个主要区别: 方法被隐式传递给调用该方法的对象。 方法能够对类中包含的数据进行操作(记住,对象是类的实例-类是定义