你真的了解程序中的取模(%)运算么?

  • 除法

表达式 a/b 商会向0取整。
例子:

     13 /  5      ==      2
     13 / -5      ==     -2
    -13 /  5      ==     -2
    -13 / -5      ==      2
  • 取模

a % b 的余数定义是:(a/b)*b + a%b==a
这个定义是不是很多人不知道(我也是才知道,所以才有了这篇总结)。
当我们求模的时候有的结果会让我们意外。
例子:

 14   %   3  ==   2
-14   %   3  ==  -2
 14   %  -3  ==   2

其中的 14 % -3 并不等于 -14 % 3 是不是很让人意外。
下面分析一下由来:
-14 % 3 按照公式就是 (-14 / 3) * 3 - (-14) = -12 - (-14) = -12 + 14 =2
14 % -3 按照公式就是 (14 /3 ) * 3 - 14 = 4 * 3 -14 = -2

我们可能经常会遇到下面的场景:

 int arrs[] = {2, 1, 0, -1, -2};
 for (int i = 0; i < arrs.length; i++) {
     System.out.println(arrs[i] + (arrs[i] % 2 == 1 ? "是奇数" : "是偶数"));
 }

运行结果如下:
2是偶数
1是奇数
0是偶数
-1是偶数
-2是偶数

所以以后采用模计算来判断奇偶性时需要特别注意负数问题。

你可能感兴趣的:(你真的了解程序中的取模(%)运算么?)