Java中关于数学运算

Java中关于数学运算

  1. Java中浮点数除以 0 产生的结果
public static void main(String[] args) {
    var i = 15.0;
    var x = i/0;
    System.out.println(getType(x));
    System.out.println(x);
}
private static String getType(Object o) {
    return o.getClass().getName();
}

输出结果

java.lang.Double
Infinity


  1. Java中 int 类型运算结果超出最大值
public static void main(String[] args) {
    var i = 1000000000;
    System.out.println(3 * i);
}

对于上面这个程序,控制台输出的结果是:-1294967296。结果显然是错误的

数学运算符只是悄悄地返回错误的结果而不做任何提醒。


Java中,当用一个运算符连接两个值时,先要将两个操作数转换为同一类型,然后再进行操作。
如果两个操作数中有一个是double类型,另一个操作数就会被转换为double类型
否则,如果其中一个是float类型,另一个操作数就会被转换为float类型
否则,如果其中一个是long类型,另一个操作数就会被转换为long类型
否则,两个操作数都会被转换为int类型。

要注意,两个byte类型的数相加,其结果是一个int类型,而不是一个byte类型。

两个char类型的数相加,其结果是一个int类型,而不是一个char类型。

举个例子:

public static void main(String[] args) {
    System.out.println('b');
    System.out.println('b' + 'c');
}

上面的代码打印出来的结果会是:

b
197


  1. 强制类型转换通过截断小数部分将浮点值转换为整型。

  1. >><<分别表示右移运算符和左移运算符,>>>表示无符号右移运算符,

>>>会用0填充高位,这与>>不同,它会用符号位填充高位,不存在<<<操作符。

移位运算符的右操作数要完成模32运算(除非左运算数是long类型,这种情况下右操作数要模64)。例如:1<<35等同于1<<3


  1. 同一个级别的运算符按照从左向右的次序进行计算(右结合运算符除外)


参考资料:

[1] Cay S.Horstmann 著,林琪 苏钰涵等译.Java核心技术 卷1(原书第11版).北京:机械工业出版社,2020:37-44.

[2] 百度百科.移位运算符.https://baike.baidu.com/item/移位运算符

posted @ 2021-10-22 10:33  realzhangsan  阅读(213)  评论(0编辑  收藏  举报