流水不争先,争的是滔滔不绝
算术运算符
| 操作符 | 描述 | 例子 |
|---|
| + | 加法 | A + B |
| - | 减法 | A – B |
| * | 乘法 | A * B |
| / | 除法 | B / A |
| % | 取余 | B % A |
| ++ | 自增(前): 先运算后取值 自增(后): 先取值后运算 | ++B B++ |
| – | 自减(前): 先运算后取值 自减(后): 先取值后运算 | –B B– |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class Day03Test { public static void main(String[] args) { int a = 10; int b = 3; System.out.println("a + b = " + (a + b)); System.out.println("a - b = " + (a - b)); System.out.println("a * b = " + (a * b)); System.out.println("a / b = " + (a / b)); System.out.println("a % b = " + (a % b)); int c = 3; System.out.println(c++); System.out.println(c); int d = 4; System.out.println(++d); int e = 5; System.out.println(e--); System.out.println(e); int f = 6; System.out.println(--f); } }
|
案例1
随意给出一个整数,打印显示它的个位数,十位数,百位数的值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
public class ArithmeticExer1 { public static void main(String[] args) { int num = 187; int bai = num / 100; int shi = num % 100 / 10; int ge = num % 10;
System.out.println("百位为:" + bai); System.out.println("十位为:" + shi); System.out.println("个位为:" + ge); } }
|
拓展:获取一个四位数的个位,十位,百位,千位
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class ArithmeticExer2 { public static void main(String[] args) { int num = 1234;
int qian = num / 1000 % 10; int bai = num / 100 % 10; int shi = num / 10 % 10; int ge = num % 10;
System.out.println("千位为:" + qian); System.out.println("百位为:" + bai); System.out.println("十位为:" + shi); System.out.println("个位为:" + ge); } }
|
案例2
为抵抗洪水,战士连续作战89小时,编程计算共多少天零多少小时
1 2 3 4 5 6 7 8 9
| public class ArithmeticExer4 { public static void main(String[] args) { int hours = 89; int day = hours / 24; int hour = hours % 24; System.out.println("为抵抗洪水,战士连续作战 89 小时:"); System.out.println("为抵抗洪水,战士连续作战 " + day + " 天 " + hour + " 小时"); } }
|
赋值运算符
| 操作符 | 描述 | 例子 |
|---|
| = | 简单的赋值运算符,将右操作数的值赋给左侧操作数 | C = A + B将把A + B得到的值赋给C |
| += | 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 | C += A等价于C = C + A |
| -= | 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 | C -= A等价于C = C - A |
| *= | 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 | C *= A等价于C = C * A |
| /= | 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 | C /= A,C 与 A 同类型时等价于 C = C / A |
| (%)= | 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 | C %= A等价于C = C%A |
| <<= | 左移位赋值运算符 | C <<= 2等价于C = C << 2 |
| >>= | 右移位赋值运算符 | C >>= 2等价于C = C >> 2 |
| &= | 按位与赋值运算符 | C &= 2等价于C = C&2 |
| ^= | 按位异或赋值操作符 | C ^= 2等价于C = C ^ 2 |
| |= | 按位或赋值操作符 | C |= 2等价于C = C | 2 |
关系运算符
| 运算符 | 描述 | 例子 | 结果 |
|---|
| == | 检查如果两个操作数的值是否相等,如果相等则条件为真。 | (A == B)为假。 | false |
| != | 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 | (A != B) 为真。 | true |
| > | 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 | (A> B)为假。 | flase |
| < | 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 | (A <B)为真。 | true |
| >= | 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 | (A> = B)为假。 | flase |
| <= | 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 | (A <= B)为真。 | true |
1 2 3 4 5 6 7 8 9 10 11 12
| class Day03Test1 { public static void main(String[] args) { int a = 10; int b = 20; System.out.println("a == b → " + (a == b)); System.out.println("a != b → " + (a != b)); System.out.println("a > b → " + (a > b)); System.out.println("a < b → " + (a < b)); System.out.println("a >= b → " + (a >= b)); System.out.println("a <= b → " + (a <= b)); } }
|
逻辑运算符
| 操作符 | 描述 | 例子 |
|---|
| && | 称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。 | (A && B)为假。 |
| | | | 称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。 | (A | | B)为真。 |
| ! | 称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。 | !(A && B)为真。 |
当用于逻辑运算时的区别
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| class LogicTest { public static void main(String[] args) { boolean b1 = false; int num1 = 10; if(b1 & (num1++ > 0)){ System.out.println("北京"); }else{ System.out.println("南京"); } System.out.println("num1 = " + num1); boolean b2 = false; int num2 = 10; if(b2 && (num2++ > 0)){ System.out.println("北京"); }else{ System.out.println("南京"); } System.out.println("num2 = " + num2); boolean b3 = false; b3 = true; int num3 = 10; if(b3 | (num3++ > 0)){ System.out.println("北京"); }else{ System.out.println("南京"); } System.out.println("num3 = " + num3);
boolean b4 = false; b4 = true; int num4 = 10; if(b4 || (num4++ > 0)){ System.out.println("北京"); }else{ System.out.println("南京"); } System.out.println("num4 = " + num4); } }
|
1 2 3 4 5 6 7 8 9 10
| class LogoinTest { public static void main(String[] args) { boolean x = true; boolean y = false; short z = 42; if((z++==42)&&(y=true))z++; if((x=false)||(++z==45))z++; System.out.println(z); } }
|
案例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
public class CompareLogicExer1 { public static void main(String[] args) { int a = 20; int b = 20; boolean bo1 = (++a % 3 == 0) && (a++ % 7 == 0); System.out.println("a = " + a); System.out.println("bo1 = " + bo1); boolean bo2 = (b++ % 3 == 0) && (++b % 7 == 0); System.out.println("b = " + b); System.out.println("bo2 = " + bo2); } }
|
位运算符
Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。
位运算符作用在所有的位上,并且按位运算。假设a = 60,b = 13;它们的二进制格式表示将如下
A = 0011 1100 B = 0000 1101
A & B = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
~A = 1100 0011
下表列出了位运算符的基本运算,假设整数变量 A 的值为 60 和变量 B 的值为 13:
| 操作符 | 描述 | 例子 |
|---|
| & | 1,则结果为1,否则为0 | (A&B),得到12,即0000 1100 |
| | | 如果相对应位都是 0,则结果为 0,否则为 1 | (A | B) 得到61,即 0011 1101 |
| ^ | 如果相对应位值相同,则结果为0,否则为1 | (A ^ B) 得到49,即 0011 0001 |
| 〜 | 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 | (〜A) 得到-61,即1100 0011 |
| << | 按位左移运算符。左操作数按位左移右操作数指定的位数。 | A << 2得到240,即 1111 0000 |
| >> | 按位右移运算符。左操作数按位右移右操作数指定的位数。 | A >> 2得到15即 1111 |
| >>> | 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 | A>>>2得到15即 0000 1111 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| public class Test3 { public static void main(String[] args) { int a = 60; int b = 13; int c = a & b; System.out.println(c);
int d = a | b; System.out.println(d);
int e = a ^ b; System.out.println(e);
int f = ~a; System.out.println(f);
int g = a << 2; System.out.println(g);
int h = a >> 2; System.out.println(h);
int i = a >>> 2; System.out.println(i); } }
|

案例
如何交换两个 int 型变量的值?String 呢?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| public class BitExer { public static void main(String[] args) { int m = 10; int n = 5;
System.out.println("m = " + m + ", n = " + n);
m = m ^ n; n = m ^ n; m = m ^ n;
System.out.println("m = " + m + ", n = " + n); } }
|
条件运算符
条件运算符也被称为三元运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。
三元运算符后面的表达式1和表达式2必须为同种类型,编译时可能会自动类型提升
variable x = (expression) ? value if true : value if false
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| public class Test4 { public static void main(String[] args) { int m = 12; int n = 5; int max = (m > n) ? m : n; System.out.println(max);
n = 15; String str = (m > n) ? "m大" : ((m == n) ? "m和n相等" : "n大"); System.out.println(str);
int n1 = 12; int n2 = 30; int n3 = -43; int max1 = (n1 > n2) ? n1 : n2; int max2 = (max1 > n3) ? max1 : n3; System.out.println(max2);
int max3 = (((n1 > n2) ? n1 : n2) > n3) ? ((n1 > n2) ? n1 : n2) : n3; System.out.println(max3); } }
|
案例
要求:控制台输出”今天是周2,10天以后是周x”
1 2 3 4 5 6 7 8
| public class ConditionExer3 { public static void main(String[] args) { int week = 2; week += 10; week %= 7; System.out.println("今天是周2, 10天以后是周" + (week == 0 ? "日" : week)); } }
|
运算符的优先级
- 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如下表,上一行运算符总优先于下一行。
- 只有单目运算符、三元运算符、赋值运算符是从右向左运算的
