On this page

Java 整数运算

Java 整数运算

Java 提供了丰富的整数运算操作,包括基本的算术运算、位运算以及各种赋值运算。下面详细介绍 Java 中的整数运算。

一、基本算术运算

Java 支持以下基本算术运算符:

运算符描述示例结果
+加法5 + 38
-减法10 - 46
*乘法7 * 642
/除法10 / 33
%取模(取余)10 % 31

示例代码

public class BasicArithmetic {
    public static void main(String[] args) {
        int a = 10;
        int b = 3;
        
        System.out.println(a + " + " + b + " = " + (a + b));  // 13
        System.out.println(a + " - " + b + " = " + (a - b));  // 7
        System.out.println(a + " * " + b + " = " + (a * b));  // 30
        System.out.println(a + " / " + b + " = " + (a / b));  // 3 (整数除法)
        System.out.println(a + " % " + b + " = " + (a % b)); // 1
        
        // 注意整数除法的特性
        System.out.println("5 / 2 = " + (5 / 2));  // 2
    }
}

二、自增和自减运算

Java 提供了自增(++)和自减(--)运算符:

运算符描述示例结果
++自增 (前/后)i++/++ii增加1
--自减 (前/后)i--/--ii减少1

前自增与后自增的区别

public class IncrementDecrement {
    public static void main(String[] args) {
        int x = 5;
        int y = x++;  // 后自增:先赋值,再自增
        
        System.out.println("x = " + x);  // 6
        System.out.println("y = " + y);  // 5
        
        int a = 5;
        int b = ++a;  // 前自增:先自增,再赋值
        
        System.out.println("a = " + a);  // 6
        System.out.println("b = " + b);  // 6
    }
}

三、复合赋值运算

Java 支持复合赋值运算符,将运算和赋值结合:

运算符描述等价于示例
+=加后赋值a = a + ba += b
-=减后赋值a = a - ba -= b
*=乘后赋值a = a * ba *= b
/=除后赋值a = a / ba /= b
%=取模后赋值a = a % ba %= b

示例代码

public class CompoundAssignment {
    public static void main(String[] args) {
        int num = 10;
        
        num += 5;  // 等价于 num = num + 5
        System.out.println("num += 5 → " + num);  // 15
        
        num -= 3;  // 等价于 num = num - 3
        System.out.println("num -= 3 → " + num);  // 12
        
        num *= 2;  // 等价于 num = num * 2
        System.out.println("num *= 2 → " + num);  // 24
        
        num /= 4;  // 等价于 num = num / 4
        System.out.println("num /= 4 → " + num);  // 6
        
        num %= 5;  // 等价于 num = num % 5
        System.out.println("num %= 5 → " + num);  // 1
    }
}

四、位运算

Java 提供了对整数进行位级操作的运算符:

运算符描述示例结果 (二进制)
&按位与5 & 30101 & 0011 = 0001 (1)
|按位或5 | 30101 | 0011 = 0111 (7)
^按位异或5 ^ 30101 ^ 0011 = 0110 (6)
~按位取反~5~0101 = 1010 (-6,考虑补码)
<<左移5 << 10101 << 1 = 1010 (10)
>>带符号右移-5 >> 111111111111111111111111111111011 >> 1 = 11111111111111111111111111111101 (-3)
>>>无符号右移-5 >>> 1高位补0,结果很大

位运算示例

public class BitwiseOperations {
    public static void main(String[] args) {
        int a = 5;  // 二进制 0101
        int b = 3;  // 二进制 0011
        
        System.out.println(a + " & " + b + " = " + (a & b));  // 1 (0001)
        System.out.println(a + " | " + b + " = " + (a | b));  // 7 (0111)
        System.out.println(a + " ^ " + b + " = " + (a ^ b));  // 6 (0110)
        System.out.println("~" + a + " = " + (~a));          // -6 (补码表示)
        
        System.out.println(a + " << 1 = " + (a << 1));      // 10 (1010)
        System.out.println(a + " >> 1 = " + (a >> 1));      // 2 (0010)
        System.out.println("-5 >>> 1 = " + (-5 >>> 1));     // 2147483645
    }
}

五、整数运算注意事项

  1. 整数溢出:当运算结果超出数据类型的范围时会发生溢出

    int max = Integer.MAX_VALUE;
    System.out.println(max + 1);  // -2147483648 (溢出)
    
  2. 整数除法:两个整数相除结果仍为整数,小数部分被截断

    System.out.println(5 / 2);  // 2 不是 2.5
    
  3. 运算优先级:运算符有明确的优先级顺序,不确定时应使用括号

    int result = 5 + 3 * 2;  // 11 不是 16
    
  4. 类型提升:运算时小类型会自动提升为大类型

    byte b1 = 10;
    byte b2 = 20;
    // byte b3 = b1 + b2;  // 错误,因为byte运算会自动提升为int
    byte b3 = (byte)(b1 + b2);  // 正确,需要强制转换
    

六、Math 类的实用方法

Java 的 Math 类提供了许多有用的数学方法:

public class MathOperations {
    public static void main(String[] args) {
        // 绝对值
        System.out.println("Math.abs(-10) = " + Math.abs(-10));  // 10
        
        // 最大值和最小值
        System.out.println("Math.max(5, 10) = " + Math.max(5, 10));  // 10
        System.out.println("Math.min(5, 10) = " + Math.min(5, 10));  // 5
        
        // 幂运算
        System.out.println("Math.pow(2, 3) = " + Math.pow(2, 3));  // 8.0 (返回double)
        
        // 平方根
        System.out.println("Math.sqrt(16) = " + Math.sqrt(16));  // 4.0
        
        // 随机数 [0.0, 1.0)
        System.out.println("Math.random() = " + Math.random());
    }
}

通过掌握这些整数运算知识,你可以在 Java 程序中高效地进行各种数值计算和位操作。