Jason Koo

      Stay hungry, Stay foolish!

导航

Java中的取模运算

Posted on 2011-10-15 23:37  Jason Koo  阅读(54066)  评论(8编辑  收藏  举报

           Java中使用%作为取模运算的运算符,这与C、C++中是一致的。对于取模运算,大家并不陌生。取模运算实际上相当于我们小学的时候学过的求余数。当时之所以引入余数是因为还没有讲过小数的概念。所以进行除法运算时,除不尽的部分就被当做余数来处理。比如5除以3等于1余2。在当时我们学习求余数的时候只涉及到两个正整数相除,对于两个负数或者一正一负两个数或者是一个小数除以一个整数情形又是如何呢?Java中的语法到底支不支持上面的这些情况呢?我也不知道答案。不过没有关系,写个小程序试试不就知道了。 

测试一:

1 public class ModTest {
2 public static void main(String[] args){
3 int a = 5;
4 int b = 3;
5 System.out.println(a % b);
6 }
7 }

编译运行后的结果:2


测试二:

1 public class ModTest {
2 public static void main(String[] args){
3 int a = -5;
4 int b = 3;
5 System.out.println(a % b);
6 }
7 }

编译运行后的结果:-2


测试三:

1 public class ModTest {
2 public static void main(String[] args){
3 int a = 5;
4 int b = -3;
5 System.out.println(a % b);
6 }
7 }

编译运行后的结果:2



测试四:

1 public class ModTest {
2 public static void main(String[] args){
3 int a = -5;
4 int b = -3;
5 System.out.println(a % b);
6 }
7 }
编译运行后的结果:-2

通过上面的四个测试可以总结出:取模支持对负数进行运算,且结果的符号总是与被除数的符号保持一致。


测试五:

1 public class ModTest {
2 public static void main(String[] args){
3 double a = 5.3;
4 int b = 3;
5 System.out.println(a % b);
6 }
7 }


编译运行后的结果:2.3


测试六: 

1 public class ModTest {
2 public static void main(String[] args){
3 int a = 5;
4 double b = 3.3;
5 System.out.println(a % b);
6 }
7 }
编译运行后的结果:1.7000000000000002

通过测试五六可以看到:取模也支持对小数进行运算。


测试七:

1 public class ModTest {
2 public static void main(String[] args){
3 double a = 5.3;
4 double b = 3.3;
5 System.out.println(a % b);
6 }
7 }
编译运行后的结果:2.0

两个小数也可以进行取模运算!

另外经过测试,负小数也可以进行模运算,结果的符号也满足上面的规律。
补充:今天在看《Thinking in Java》第三章的时候,书上举了一个针对不同数据类型进行所有运算的例子,通过分析发现:对于具有相同类型的两个变量a和b,取模运算适用于除了布尔类型之外的所有基本数据类型。具体说,对于两个变量a和b,当a、b均为布尔类型时,它们是不能进行取模运算的;当a、b均为字符型(或者字节型、短整型、整型、长整型、单精度浮点型、双精度浮点型)时,它们是可以进行取模运算的。