Java 算术运算符
Java教程 - Java算术运算符
在数学表达式中使用算术运算符。
所有算术运算符
下表列出了算术运算符:
运算符 | 结果 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法 |
% | 余数 |
++ | 自增 |
+= | 加法分配 |
-= | 减法分配 |
*= | 乘法分配 |
/= | 除法分配 |
%= | 模量分配 |
-- | 自减 |
算术运算符的操作数必须是数字类型。您不能在 boolean
类型上使用算术运算符,但可以在 char
类型上使用它们。
基本算术运算是加法,减法,乘法和除法。他们的行为正如你所期望的。减运算符也有一个一元形式,它取消它的单个操作数。
下面的快速演示显示了如何在Java中进行简单的计算基本算术运算符。
public class Main { public static void main(String args[]) { System.out.println("Integer Arithmetic"); int a = 1 + 1; int b = a * 3; int c = b / 4; int d = c - a; int e = -d; System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("c = " + c); System.out.println("d = " + d); System.out.println("e = " + e); int x = 42; System.out.println("x mod 10 = " + x % 10); double y = 42.25; System.out.println("y mod 10 = " + y % 10); } }
运行此程序时,将看到以下输出:
模运算符%
返回除法运算的余数。模运算符可以应用于浮点类型以及整数类型。
Java复合分配操作符
语句如下
a = a + 4;
可以重写为
a += 4;
两个语句执行相同的操作:它们将 a
的值增加4。
任何形式的声明
var = var op expression;
可以重写为
var op= expression;
这里是一个示例程序,显示了几个 op=
操作符赋值:
public class Main { public static void main(String args[]) { int a = 1; int b = 2; int c = 3; a += 1; b *= 2; c += a * b; c %= 3; System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("c = " + c); } }
此程序的输出如下所示:
Java增量和减量运算符
++
和 -
是Java的递增和递减运算符。增量运算符 ++
会将其操作数增加1。递减运算符 -
将其操作数减1。
增量和减量运算符之间的不同:
例如,这个语句:
x = x + 1;
可以这样通过使用增量运算符重写:
x++;
这句话:
x = x - 1;
相当于
x--;
递增和递减运算符是唯一的,因为它们可以以后缀形式和前缀形式出现。在后缀形式中,它们遵循操作数,例如 i++
。在前缀形式中,它们在操作数之前,例如, - i
。
当增量和/或减量运算符是部分时,这两种形式之间的差异出现的较大表达式。在前缀形式中,操作数在表达式中使用值之前递增或递减。在后缀形式中,在表达式中使用该值,然后修改操作数。
下表总结了前后递增和递减操作之间的差异:
x的初始值 | 表达 | y的最终值 | x的最终值 |
---|---|---|---|
5 | y = x ++ | 5 | 6 |
5 | y = ++ x | 6 | 6 |
5 | y = x-- | 5 | 4 |
5 | y = --x | 4 | 4 |
例如:
x = 42; y = ++x;
y
设置为43,因为增量在x分配给y之前发生。 因此,线
y = ++x;
是相当于这两个语句:
x = x + 1; y = x;
然而,当这样写时,
x = 42; y = x++;
在执行增量运算符之前获取x的值,因此值的y为42。
在这两种情况下,x设置为43。线
y = x++;
是相当于这两个语句:
y = x; x = x + 1;
以下程序演示了增量运算符。
public class Main { public static void main(String args[]) { int a = 1; int b = 2; int c = ++b; int d = a++; System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("c = " + c); System.out.println("d = " + d); } }
该程序的输出如下:
Java 布尔运算符
Java教程 - Java布尔运算符
布尔逻辑运算符操作布尔操作数。
逻辑运算符列表
下表列出了所有Java布尔逻辑运算符。
运算符 | 结果 |
---|---|
& | 逻辑AND |
| | 逻辑或 |
^ | 逻辑异或(异或) |
|| | 短路OR |
&& | 短路AND |
! | 逻辑一元NOT |
&= | AND分配 |
|= | OR分配 |
^= | XOR分配 |
== | 等于 |
!= | 不等于 |
? : | 三元if-then-else |
True table
下表显示了每个逻辑操作的效果:
A | B | A | B | A& B | A ^ B | !A |
---|---|---|---|---|---|
False | False | False | False | False | True |
True | False | True | False | True | False |
False | True | True | False | True | True |
True | True | True | True | False | False |
以下程序演示了布尔逻辑运算符。
public class Main { public static void main(String args[]) { boolean a = true; boolean b = false; boolean c = a | b; boolean d = a & b; boolean e = a ^ b; boolean f = (!a & b) | (a & !b); boolean g = !a; System.out.println(" a = " + a); System.out.println(" b = " + b); System.out.println(" a|b = " + c); System.out.println(" a&b = " + d); System.out.println(" a^b = " + e); System.out.println("!a&b|a&!b = " + f); System.out.println(" !a = " + g); } } ]]>
输出:
例子
以下程序演示了按位逻辑运算符:
public class Main { public static void main(String args[]) { int a = 1; int b = 2; int c = a | b; int d = a & b; int e = a ^ b; int f = (~a & b) | (a & ~b); int g = ~a & 0x0f; System.out.println(" a = " + a); System.out.println(" b = " + b); System.out.println(" a|b = " + c); System.out.println(" a&b = " + d); System.out.println(" a^b = " + e); System.out.println("~a&b|a&~b = " + f); System.out.println(" ~a = " + g); } }
这里是这个程序的输出:
Java逻辑运算符快捷方式
当一个操作数为 true
时, OR
运算符为真,无论第二个操作数是什么。当一个操作数为 false
时, AND
运算符将导致false,操作数是。如果使用 ||
和&&
,Java将不会评估右侧操作数结果可以由左操作数单独确定。
下面的代码显示了如何使用短路逻辑运算符确保除法运算在评估之前有效:
public class Main { public static void main(String[] args) { int denom = 0; int num = 3; if (denom != 0 && num / denom > 10) { System.out.println("Here"); } else { System.out.println("There"); } } }
输出:
如果我们想要改变逻辑运算符的快捷行为,我们可以使用& 和|。
例2
以下代码使用单个& 确保增量操作将会应用于 e
是否 c
等于1。
public class Main { public static void main(String[] args) { int c = 0; int e = 99; int d = 0; if (c == 1 & e++ < 100) d = 100; System.out.println("e is " + e); System.out.println("d is " + d); } }
输出:
Java 关系运算符
Java教程 - Java关系运算符
Java关系运算符确定两个操作数之间的关系。
关系运算符列表
Java中的关系运算符是:
运算符 | 结果 |
---|---|
== | 等于 |
!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于或等于 |
<= | 小于或等于 |
例如,以下代码段完全有效。它比较两个int值并将结果分配给布尔值c。
public class Main { public static void main(String[] argv) { int a = 4; int b = 1; boolean c = a < b; System.out.println("c is " + c); } }
a <b(为假)的结果存储在c中。
例子
关系运算符的结果是一个布尔值。在下面的代码中, System.out.println
输出关系运算符的结果。
public class Main { public static void main(String args[]) { // outcome of a relational operator is a boolean value System.out.println("10 > 9 is " + (10 > 9)); } }
此程序生成的输出如下所示:
Java 三元运算符
Java教程 - Java三元运算符
?
运算符是三元运算符。
Java三元运算符基本上是简单的if语句的简写形式。
语法
?
具有以下一般形式:
expression1 ? expression2 : expression3
expression1
可以是计算为 boolean
值的任何表达式。如果 expression1
是 true
,那么将评估 expression2
。否则,将评估 expression3
。
计算的表达式是?
操作的结果。需要 expression2
和 expression3
来返回相同的类型,这可以是无效的。
下面是?
运算符的示例:
public class Main {
public static void main(String[] argv) {
int denom = 10;
int num = 4;
double ratio;
ratio = denom == 0 ? 0 : num / denom;
System.out.println("ratio = " + ratio);
}
}
输出:
例子
这是另一个演示?
运算符的程序。它使用它来获取变量的绝对值。
public class Main {
public static void main(String args[]) {
int i, k;
i = 10;
k = i < 0 ? -i : i;
System.out.print("Absolute value of ");
System.out.println(i + " is " + k);
i = -10;
k = i < 0 ? -i : i;
System.out.print("Absolute value of ");
System.out.println(i + " is " + k);
}
}
程序生成的输出如下所示:
Java 按位运算符
Java教程 - Java按位运算符
按位操作符作用于其操作数的各个位。Java按位运算符可以应用于整数types: long,int,short,char,byte
。
按位运算符列表
下表列出了所有Java按位运算符。
运算符 | 结果 |
---|---|
~ | 按位一元NOT |
& | 按位AND |
| | 按位或 |
^ | 按位异或 |
>> | 向右移动 |
>>> | 右移零填充 |
<< | 向左移动 |
&= | 按位AND分配 |
|= | 按位OR分配 |
^= | 按位异OR分配 |
>>= | 右移赋值 |
>>>= | 右移零填充分配 |
<<= | 向左移位 |
按位运算符分配将赋值与按位运算组合。以下两个语句是等效的:
a = a >> 4; a >>= 4;
以下两个语句是等效的:
a = a | b; a |= b;
以下程序演示了按位运算符分配:
public class Main { public static void main(String args[]) { int a = 1; int b = 2; int c = 3; a |= 2; b >>= 2; c <<= 2; a ^= c; System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("c = " + c); } }
此程序的输出如下所示:
Java左移运算符
左移位算子,<<移位所有位中的一个值到左边一个指定的数字的时间。
它有这种一般形式:
value << num
以下代码移位字节类型变量。
public class Main { public static void main(String args[]) { byte a = 64, b; int i; i = a << 2; b = (byte) (a << 2); System.out.println("Original value of a: " + a); System.out.println("i and b: " + i + " " + b); } }
此程序生成的输出如下所示:
例子
每个左移具有使原始值加倍的效果。以下程序说明了这一点:
public class Main { public static void main(String args[]) { int num = 0xFFFFFFF; for (int i = 0; i < 4; i++) { num = num << 1; System.out.println(num); } } }
程序生成以下输出:
Java右移运算符
右移位运算符>>
将值中的所有位向右移a指定次数。
其一般形式如下所示:
value >> num
num
指定要向右移位的位置数。
以下代码段将值 32
向右移两个位置:
public class Main { public static void main(String[] argv) { int a = 32; a = a >> 2; System.out.println("a is " + a); } }
输出:
Java无符号右移
Java无符号,右移运算符,>>>
,始终将零转移到高阶位。
其一般形式如下所示:
value >>> num
num
指定要向右移位的位置数。
以下代码显示如何使用无符号右移。
public class Main { public static void main(String[] argv) { int a = -1; a = a >>> 24; System.out.println("a is " + a); } }
输出: