跳转到内容

算术表达式

100% developed
来自维基教科书,开放书籍,开放世界

导航 语言基础 主题: v  d  e )

在 Java 中进行算术运算,必须先声明至少一个变量。通常情况下,在进行任何算术运算之前,会先声明一个变量并为其赋值。以下是一个声明整数变量的示例

Example 代码部分 3.59:变量赋值。
int x = 5;

创建变量后,可以使用 Java 的运算符来操作其值:+(加法)、-(减法)、*(乘法)、/(整数除法)、% (取模或余数)、++(前缀和后缀自增 1)、--(前缀和后缀自减 1)。

Computer code 代码清单 3.10:Operators.java
public class Operators {
  public static void main(String[] args) {
    int x = 5;
    System.out.println("x = " + x);
    System.out.println();
   
    System.out.println("--- Addition             ---");
    x = 5;
    System.out.println("x + 2 = " + (x + 2));
    System.out.println("x = " + x);
    System.out.println();
   
    System.out.println("--- Subtraction          ---");
    x = 5;
    System.out.println("x - 4 = " + (x - 4));
    System.out.println("x = " + x);
    System.out.println();
   
    System.out.println("--- Multiplication       ---");
    x = 5;
    System.out.println("x * 3 = " + (x * 3));
    System.out.println("x = " + x);
    System.out.println();
   
    System.out.println("--- (Integer) Division   ---");
    x = 5;
    System.out.println("x / 2 = " + (x / 2));
    System.out.println("x = " + x);
    System.out.println();
   
    System.out.println("--- Modulo (Remainder)   ---");
    x = 5;
    System.out.println("x % 2 = " + (x % 2));
    System.out.println("x = " + x);
    System.out.println();
   
    System.out.println("--- Preincrement by one  ---");
    x = 5;
    System.out.println("++x   = " + (++x  ));
    System.out.println("x = " + x);
    System.out.println();
   
    System.out.println("--- Predecrement by one  ---");
    x = 5;
    System.out.println("--x   = " + (--x  ));
    System.out.println("x = " + x);
    System.out.println();
   
    System.out.println("--- Postincrement by one ---");
    x = 5;
    System.out.println("x++   = " + (x++  ));
    System.out.println("x = " + x);
    System.out.println();
   
    System.out.println("--- Postdecrement by one ---");
    x = 5;
    System.out.println("x--   = " + (x--  ));
    System.out.println("x = " + x);
    System.out.println();
  }
}
Standard input or output 代码清单 3.10 的控制台
x = 5

--- Addition             ---
x + 2 = 7
x = 5

--- Subtraction          ---
x - 4 = 1
x = 5

--- Multiplication       ---
x * 3 = 15
x = 5

--- (Integer) Division   ---
x / 2 = 2
x = 5

--- Modulo (Remainder)   ---
x % 2 = 1
x = 5

--- Preincrement by one  ---
++x   = 6
x = 6

--- Predecrement by one  ---
--x   = 4
x = 4

--- Postincrement by one ---
x++   = 5
x = 6

--- Postdecrement by one ---
x--   = 5
x = 4

除法运算符向零取整:5/2 为 2,-5/2 为 -2。余数运算符与左操作数的符号相同;其定义方式使得 ((a/b)*b) + (a%b) 始终等于 a。前缀自增、前缀自减、后缀自增和后缀自减运算符是特殊的:它们也会通过加 1 或减 1 来改变变量的值。唯一的区别是前缀自增/自减返回变量的新值;后缀自增返回变量的原始值。

测试你的知识

问题 3.8:考虑以下代码

Computer code 问题 3.8:Question8.java
public class Question8 {
  public static void main(String[] args) {
    int x = 10;
    x = x + 10;
    x = 2 * x;
    x = x - 19;
    x = x / 3;
    System.out.println(x);
  }
}

标准输出中将打印什么?

答案
Standard input or output 问题 3.8 的输出
7

int x = 10; => 10
x = x + 10; => 20
x = 2 * x; => 40
x = x - 19; => 21
x = x / 3; => 7

在同一个表达式中使用多个运算符时,必须考虑 Java 的运算符优先级。Java 使用标准的 PEMDAS(括号、指数、乘除、加减)顺序。当存在多个相同优先级的实例时,Java 会从左到右读取。考虑以下代码的输出

Example 代码部分 3.60:多个运算符。
System.out.println(10*5 + 100/10 - 5 + 7%2);
Standard input or output 代码部分 3.60 的控制台
56

下表显示了 Java 如何计算该表达式


图 3.1:Java 编程语言中算术表达式的计算


除了执行数学函数之外,还有一些运算符可以将数字赋值给变量(每个示例再次使用初始化为 x = 5 的变量)

Computer code 代码清单 3.11:Assignments.java
public class Assignments {
  public static void main(String[] args) {
    int x = 5;
    x = 3;
    System.out.println("Assignment                                       (x = 3) : " + x);

    x = 5;
    x += 5;
    System.out.println("Assign x plus another integer to itself          (x += 5): " + x);

    x = 5;
    x -= 4;
    System.out.println("Assign x minus another integer to itself         (x -= 4): " + x);

    x = 5;
    x *= 6;
    System.out.println("Assign x multiplied by another integer to itself (x *= 6): " + x);

    x = 5;
    x /= 5;
    System.out.println("Assign x divided by another integer to itself    (x /= 5): " + x);
  }
}
Standard input or output 代码清单 3.11 的控制台
Assignment                                       (x = 3) : 3
Assign x plus another integer to itself          (x += 5): 10
Assign x minus another integer to itself         (x -= 4): 1
Assign x multiplied by another integer to itself (x *= 6): 30
Assign x divided by another integer to itself    (x /= 5): 1

在 Java 中使用位运算符

[edit | edit source]

除了算术运算符之外,Java 还有一组位运算符来操作数字中的位,以及一组逻辑运算符。位逻辑运算符是

运算符 函数 的值
x 之前
示例
输入
示例
输出
的值
x 之后
& 按位与 7 x&27 3 7
| 按位或 7 x|27 31 7
^ 按位异或 7 x^27 28 7
~ 按位取反 7 ~x -8 7

除了这些逻辑位函数之外,还有一些运算符可以将数字赋值给变量(x = -5

运算符 函数 示例
输入
示例输出
&= x 按位与另一个值并赋值给自身 x &= 3 3
|= x 按位或另一个值并赋值给自身 x |= 3 -5
^= x 按位异或另一个值并赋值给自身 x ^= 3 -8
<<= x 除以另一个整数并赋值给自身 x <<= 1 -10
>>= x 按位取反另一个值并赋值给自身 x >>= 1 -3
>>>= x 按位取反另一个值并赋值给自身 x >>>= 1 2,305,843,009,213,693,949 (64 位)

移位运算符用于将位向左或向右移动,这也是快速乘以/除以 2 的方法

运算符 函数 的值
x 之前
示例
输入
示例输出 的值
x 之后
<< 逻辑左移 -15 x << 2 -60 -15
>> 算术右移 -15 x >> 3 -2 -15
>>> 逻辑右移 -15 x >>> 3 2,305,843,009,213,693,937 (64 位) -15


华夏公益教科书