1.除法运算。
a.全是正数时,截断取整,去掉小数部分。
128 / 10 = 12;
120 / 10 = 12;
119 / 10 = 11;
b.当被除数或者除数出现负数时,可以理解成把负号提取出来,再采取上面一样的做法。
(-128) / 10 = -(128 / 10) = -12;
(128) / (-10) = -(128 / 10) = -12;
(-128) / (-10) = - -(128 / 10) = 128 / 10 = 12;
2.取模运算。
a.全是正数时,可理解为除法截断的部分,余数。
128 = (128 / 10) * 10 + (128 % 10);
128 = 12 * 10 + (128 % 10);
128 = 120 + 8;
128 % 10 = 8;
b.当出现负数时,取模运算的结果的正负号与被取模数相同。
128 = (128 / 10) * 10 + (128 % 10);
128 = 12 * 10 + 8;
128 % 10 = 8;
-128 = (-128 / 10) * 10 + (-128 % 10);
-128 = -(12) * 10 + (-128 % 10);
-128 = -120 + (-8);
-128 % 10 = -8;
128 = (128 / -10) * -10 + (128 % -10);
128 = -12 * -10 + (128 % -10);
128 = 120 + 8;
128 % -10 = 8;
-128 = (-128 / -10) * -10 + (-128 % -10);
-128 = 12 * -10 + (-128 % -10);
-128 = -120 + (-8);
-128 % -10 = -8;
简单理解为:
%取模运算, 结果正负号与被取模数一致。
除法是趋向0的截断取整。
128 / 10 * 10 = 120比128更接近0。
-128 / 10 * 10 = -120比-128更接近0。
128 / -10 * -10 = 120比128更接近0。
-128 / -10 * -10 = -120比-128更接近0。
x = x/y*y + x%y;
x%y = x - x/y*y;
假设 D = x/y*y,
x%y = x - D;
D具有以x为起点,趋向于0的特性。
当被取模数x为正数时, D趋向于0,D<=x, 取模结果(x - D)必定是0或者正数。
当被取模数x为负数时, D趋向于0,D>=x, 取模结果(x - D)必定是0或者负数。
因此得出:
%取模运算, 结果正负号与被取模数一致的结论。