C语言中modulo(取模)运算符疑问:为何1%10的运算结果为1
取模运算核心规则
取模运算的数学定义为:对于整数a和正整数b,存在唯一的整数q(商)和r(余数,即a % b的运算结果),满足两个约束:
a = b * q + r0 ≤ r < b
案例验证
你熟悉的7 % 2 = 1
代入定义计算:a=7,b=2,取最大的非负整数商q=3,此时r = 7 - 2*3 = 1,满足0 ≤ 1 < 2,结果符合规则。
你疑惑的1 % 10 = 1
同样代入定义:a=1,b=10,此时能取到的最大非负整数商是q=0(如果取q≥1,b*q会大于a,导致r为负数,不满足余数的取值要求),计算得r = 1 - 10*0 = 1,完全符合0 ≤1 <10的约束,结果是正确的。
通俗理解
你可以把取模运算理解为「凑最多的整份b之后剩下的部分」:你手里只有1个物品,要按每份10个来凑整份,1份都凑不出来,剩下的自然是1个,这就是1%10=1的直观逻辑。
所有编程语言的正数取模逻辑都完全遵循上述规则,只有负数取模的边界处理会存在语言差异。
内容的提问来源于stack exchange,提问作者PRIYANSHU KUMAR
相关产品推荐
相关产品推荐

