算术运算符(Operator)(掌握)
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
运算符的分类:
- 按照功能分为:算术运算符、赋值运算符、比较(或关系)运算符、逻辑运算符、位运算符、条件运算符、Lambda运算符
分类 | 运算符 |
---|---|
算术运算符(7个) | +、-、*、/、%、++、– |
赋值运算符(12个) | =、+=、-=、*=、/=、%=、>>=、<<=、>>>=、&=、|= 、^=等 |
比较(或关系)运算符(6个) | >、>=、<、<=、==、!= |
逻辑运算符(6个) | &、|、^、!、&&、|| |
位运算符(7个,但不太常用) | &、|、^、~、<<、>>、>>> |
条件运算符(1个) | (条件表达式)?结果1:结果2 |
Lambda运算符(1个) | ->(第18章时讲解) |
- 按照操作数个数分为:一元运算符(单目运算符)、二元运算符(双目运算符)、三元运算符(三目运算符)
分类 | 运算符 |
---|---|
一元运算符(单目运算符) | 正号(+)、负号(-)、++、–、!、~ |
二元运算符(双目运算符) | 除了一元和三元运算符剩下的都是二元运算符,例如x,y |
三元运算符(三目运算符) | (条件表达式)?结果1:结果2 |
算术运算符
1.1基本语法
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
++(前) | 先运算后取值 | a = 2; b = ++a; | a = 3; b = 3 |
++(后) | 先取值后运算 | a = 2; b = a++; | a = 3;b = 2 |
–(前) | 先运算后取值 | a = 2; b = --a | a = 1;b = 1 |
–(后) | 先取值后运算 | a = 2; b = a– | a = 1;b=2 |
+ | 字符串连接 | “He”+“llo” | “Hello” |
// 结论:取模以后,结果与被模数的符号相同
int i2 = -12;
int j2 = 5;
System.out.println(i2 % j2);
// 输出结果为-2
int i3 = 12;
int j3 = -5;
System.out.println(i3 % j3);
// 输出结果为2
int i4 = -12;
int j4 = -5;
System.out.println(i4 % j4);
// 输出结果为-2
练习1:
int i = 10;
i++;或++i;
System.out.println(i); // 结果都为11
练习2:
short s1 = 10;
//方式1:
// 编译不通过
// s1 = s1 + 1;
// 不通过原因是1是int型,加在一起,结果是int,而不是short
s1 = (short)(s1 + 1);
System.out.println(s1);
//方式2:
s1++;
System.out.println(s1);
练习3:
随意给出一个三位的整数,打印显示它的个位数,十位数,百位数的值
格式如下:
数字xxx的情况如下:
个位数:
十位数:
百位数:
/**
例如:
数字153的情况如下:
个位数:3
十位数:5
百位数:1
*/
class AriExer{
public static void main(String[] args){
int num = 153;
int ge = num % 10;
int shi = num / 10 % 10;
// int shi = num % 100 / 10;
int bai = num / 100;
System.out.println("个位数:"+ ge + ",十位数:"+ shi + ",百位数:" + bai);
}
}
拓展:获取一个四位数的个位,十位,百位,千位
public class ArithmeticExer01{
public static void main(String[] args){
// 1.定义一个变量,赋值为一个四位数整数,例如1234
int num = 1234;
// 2. 通过运算操作求出个位,十位,百位,千位
int ge = num % 10;
int shi = num / 10 % 10;
int bai = num / 100 % 10;
int qian = num / 1000;
System.out.println("个位上的数字是:"+ ge);
System.out.println("十位上的数字是:"+ shi);
System.out.println("百位上的数字是:"+ bai);
System.out.println("千位上的数字是:"+ qian );
}
}
练习4:为抵抗洪水,战士连续作战89小时,编程计算共多少天零多少小时?
public class ArithmeticExer2{
public static void main(String[] args){
int hours = 89;
int day = hours / 24;
int hour = hours % 24;
System.out.println("为抵抗洪水,战士连续作战89小时:");
System.out.println(hours + "是" + day + "天" + hour + "小时");
// 额外的练习1:
System.out.println("5 + 5 = " + 5 + 5);
// 输出结果为:5 + 5 = 55
System.out.println("5 + 5 = " + (5 + 5));
// 输出结果为:5 + 5 = 10
// 额外的练习2:
byte bb1 = 127;
bb1++;
System.out.println("bb1 = " + bb1);
//结论: ++ 或 -- 运算,不会改变变量的数据类型!
//结果为: - 128
// 额外的练习3:
int i = 1;
int j = i++ + ++i * i++;
System.out.println("j = " + j);
// 输出结果为: 10
// 额外的练习4:
int i = 2;
int j = i++;
System.out.println(j);
// 输出结果为:2
int k = 2;
int z = ++k;
System.out.println(z);
// 输出结果为:3
int m = 2;
m = m++;
System.out.println(m);
// 输出结果为: 2
// (1)先取b的值"2"放操作数栈
// (2)m再自增,m = 3
// (3)再把操作数栈中的"2"赋值给m,m = 2
}
}