C 的%运算知多少呢? 当是正整数时,可能大家都知道。例如:5%3 等于 2, 3%5 等于 3。 当存在负数时呢?先看看例子: 例一: int main() {int x; x = -6%5; printf("%2d/n",x); x = 6%-5; printf("%2d/n",x); x = 1%-5; printf("%2d/n",x); x = -1%-5; printf("%2d/n",x); x = -6%-5; printf("%2d/n",x); } 运行结果为: -1 1 1 -1 -1 例二: #include int main() {int x; x = 5%-6; printf("%2d/n",x); x = -5%6; printf("%2d/n",x); x = 4%5; printf("%2d/n",x); x = -4%-5; printf("%2d/n",x); x = -5%-6; printf("%2d/n",x); } 运行结果为: 5 -5 4 -4 -5 余数的定义:当被除数不够整除时余下的数。 余数的定义:当被除数不够整除时余下的数。 当都是正整数时: 当都是正整数时 除法实际可转化为减数,不够减时剩下的就是余数。 例如:12%5 12-5-5 2 当存在负数时: 当存在负数时 x%y i. 当异号时: 当异号时: if |x|>|y| result: x+y else result: x 例: -6% 5 等于-1 6%-5 等于 1 5%-6 等于 5 -5% 6 等于 -5 ii. 当同号时: 当同号时: if |x|>|y| result: x-y else result: x 例: -1%-5 等于-1 -6%-5 等于-1 -4%-5 等于-4 -5%-6 等于-5 再看看我们余数的定义 余数的定义: 余数的定义 整除“余 下的 下的“数 。 整除 余”下的 数”。 则有:余数=被除数-商*除数 余数=被除数- 除数 余数 商就是我们整除的结果。 看例子: eg1: (-6%5) = -6 - (-6/5)*5 (-6%5) = -6 - (-1)*5 (-6%5) = -6 - (-5) (-6%5) = -6+5 (-6%5) = -1 eg2: (5%-6) = 5 - (5/-6)*(-6) (5%-6) = 5 - (0)*(-6) (5%-6) = 5 - 0 (5%-6) = 5 eg3: (-5%-6)= -5 - (-5/-6)*(-6) (-5%-6)= -5 - (0)*(-6) (-5%-6)= -5 - 0 (-5%-6)= -5 eg4: (6%-5) = 6 - (6/-5)*(-5) (6%-5) = 6 - (-1)*(-5) (6%-5) = 6 - 5 (6%-5) = 1 数学中的余数(remainder) 其实就是取模(mod),即: x mod y = x%y x%y = x - y[x/y], for y!=0. 数学中的余数概念和我们的计算机中的余数概念一致,但实现却不一致。 其中 [x/y] 代表的是 x/y 的最小下界。 例: -3 mod 2 = -3 - 2*[-3/2] = -3 - 2*[-1.5] = -3 - 2*(-2) = -3 + 4 =1 而我们的计算机是怎么做的呢: -3%2 = -3 - 2*(-3/2) = -3 - 2*(-1) = -3 - (-2) = -1 所以计算机中的取余实际上是: x%y = x - y(x/y), for y!=0.