美文网首页
1.1 整数运算

1.1 整数运算

作者: 轻轻敲醒沉睡的心灵 | 来源:发表于2021-03-08 13:34 被阅读0次

    1. 四则运算

    • Java的整数运算遵循四则运算规则,可以使用任意嵌套的小括号。四则运算规则和初等数学一致。例如:
    public class Main {
        public static void main(String[] args) {
            int i = (100 + 200) * (99 - 88); // 3300
            int n = 7 * (5 + (i - 9)); // 23072
            System.out.println(i);
            System.out.println(n);
        }
    }
    
    • 整数的数值表示不但是精确的,而且整数运算永远是精确的,即使是除法也是精确的
      两个整数相除只能得到结果的整数部分,求余运算使用%
    int x = 12345 / 67; // 184
    int y = 12345 % 67; // 12345÷67的余数是17
    

    特别注意:整数的除法对于除数为0时运行时将报错,但编译不会报错。

    2. 溢出

    要特别注意,整数由于存在范围限制,如果计算结果超出了范围,就会产生溢出,而溢出不会出错,却会得到一个奇怪的结果:

    public class Main {
        public static void main(String[] args) {
            int x = 2147483640;
            int y = 15;
            int sum = x + y;
            System.out.println(sum); // -2147483641
        }
    }
    

    加法结果变成了一个负数,是因为运算时,二进制的最高位(符号位)改变了。

       0111 1111 1111 1111 1111 1111 1111 1000
    +  0000 0000 0000 0000 0000 0000 0000 1111
       -----------------------------------------
      1000 0000 0000 0000 0000 0000 0000 0111
    

    3. 自增/自减

    Java还提供了++运算和--运算,它们可以对一个整数进行加1和减1的操作:

    public class Main {
        public static void main(String[] args) {
            int n = 3300;
            n++; // 3301, 相当于 n = n + 1;
            n--; // 3300, 相当于 n = n - 1;
            int y = 100 + (++n); // 不要这么写
            System.out.println(y);
        }
    }
    

    注意++写在前面和后面计算结果是不同的,++n表示先加1再引用n,n++表示先引用n再加1。不建议把++运算混入到常规运算中,容易自己把自己搞懵了。

    4. 运算优先级

    在Java的计算表达式中,运算优先级从高到低依次是:

    • ()
    • ! ~ ++ --
    • * / %
    • + -
    • << >> >>>
    • &
    • |
    • += -= *= /=

    记不住也没关系,只需要加括号就可以保证运算的优先级正确。

    5. 类型自动提升与强制转型

    在运算过程中,如果参与运算的两个数类型不一致,那么计算结果为较大类型的整型。例如,short和int计算,结果总是int,原因是short首先自动被转型为int:

    public class Main {
        public static void main(String[] args) {
            short s = 1234;
            int i = 123456;
            int x = s + i; // s自动转型为int
            short y = s + i; // 编译错误!
        }
    }
    

    自动转换顺序:

    double > float > long > int > short > byte
    

    也可以将结果强制转型,即将大范围的整数转型为小范围的整数。强制转型使用(类型),例如,将int强制转型为short:

    int i = 12345;
    short s = (short) i; // 12345
    

    要注意,超出范围的强制转型会得到错误的结果,原因是转型时,int的两个高位字节直接被扔掉,仅保留了低位的两个字节:

    // 强制转型的结果很可能是错的
    public class Main {
        public static void main(String[] args) {
            int i1 = 1234567;
            short s1 = (short) i1; 
            System.out.println(s1); // -10617
            int i2 = 12345678;
            short s2 = (short) i2; 
            System.out.println(s2); // 24910
        }
    }
    

    本文参考:https://www.liaoxuefeng.com/wiki/1252599548343744

    相关文章

      网友评论

          本文标题:1.1 整数运算

          本文链接:https://www.haomeiwen.com/subject/todpqltx.html