算数运算符
运算符和表达式
- 运算符: 对常量或者变量进行操作的符号
- 表达式: 用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式 不同运算符连接的表达式体现的是不同类型的表达式
举例说明:
int a = 10;
int b = 20;
int c = a + b;
- +:是运算符,并且是算数运算符
- a + b:是表达式,由于是+是算数运算符, 所以这个表达式叫算术表达式
- / 和%的区别: 两个数据的做法,/取结果的商,%取结果的余数。
- 整数操作只能得到整数,要想得到小数,必须有浮点数参与运算。
package test;
/*
运算符:
对[常量]或[变量]进行操作的符号
算数运算符
+ - * : 跟小学数学的运算方式一样
/: 整数相除,结果只能得到整数,如果相要得到带有小数的结果,必须加入小数(浮点类型)的运算
%(取模) : 取余数
* */
public class code03 {
public static void main(String[] args) {
System.out.println(10 + 20);
System.out.println(10 - 20);
System.out.println(10 * 20);
System.out.println("------------------------");
/*
* / : 整数相除,结果只能得到整数,如果想要得到带有小数的结果,必须加入小数(浮点类型)的运算
* */
System.out.println(10 / 2); //5
System.out.println(10 / 3); //3
System.out.println(10 / 3.0); //3.3333333333333335
System.out.println(10.0 / 3); //3.3333333333333335
System.out.println("------------------------");
/*
%(取模): 取余数
* */
System.out.println(5 % 2); // 5 / 2 = 商2,取余为1
}
}
字符的”+”操作
- ASCII码表
ASCI:美国信息交换标准代码
是计算机中字节到字符的一套对应关系.
为什么要有这样的码表?
计算机数据中的存储,都是以字节的形式在进行存储,我们不会直接操作繁琐的, 不便于记忆的字节。
例如:我们想要使用字符a,但字符a真正存储的字节表示是数值97,如果直接面向字节,那现在要表示字节j 难道还要现去查找吗?
不现实,太麻烦!
a和b的运算中,a 为int类型 , b 为char类型
当(byte short char int) 在一起运算的时候,都会提升为int之后,再进行运算char提升为int的过程,就是查找码表中。字符所对应的数值表示形式
字符‘a’ 查找到数值97之后,在跟数值1进行运算,结果就是98
所以最终输出在控制台的结果就是98
当”+” 操作中出现字符串时,这个”+”是字符串连接符,而不是算数运算
当字符串的 “+” 操作
当“+” 操作中出现字符串时,这个“+” 是字符串连接符,而不是算数运算符
- “List item” + 666
当“ +” 操作中,如果出现了字符串,就是连接运算符,否则就是算数运算,当连续进行"+" 操作时,从左到右逐个执行
- 1 + 99 + “List item”
案例: 数值拆分
需求: 键盘录入一个三位数,将其拆分为个数,十位,百位后,打印在控制台
分析:
使用Scanner键盘录入一个三位数
个位的计算:数值%10
123 除以10 (商12,余数为3)
十位的计算:数值 /10% 10
123除以10 (商12,余数为3 整数相除只能得到整数)
12除以10 (商1 ,余数为2)
百位的计算: 数值/100
123 除以 100(商1 余数为23)
将个位,十位,百位拼接上正确的字符串,打印即可
package test;
import java.util.Scanner;
/*
* 需求:键盘录入一个三位数,将其拆分为个位,十位,百位后,打印在控制台
* 运行结果:
* 请输入一个三位数:
* 123
* 整数123个位为:3
* 整数123十位为:2
* 整数123百位为:1
* 分析:
* 1.使用Scanner键盘录入一个三位数
* 2.个位的计算:数值 % 10
* 3.十位的计算:数值 / 10 % 10
* 4.百位的计算:数值 / 100
* 5.将个位,十位,百位拼接上正确的字符串,打印即可
* */
public class code03 {
public static void main(String[] args) {
// 1.使用Scanner键盘录入一个三位数
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个三位数");
int num = sc.nextInt();
//2:个位的计算: 数值 % 10
int ge = num % 10; //123 % 10 = 3
//3:十位的计算: 数值 / 10 % 10
int shi = num / 10 % 10; //123 % 10 = 2
//4:百位的计算:数值 / 100
int bai = num / 100; //123 % 10 = 1
//5:将个位,十位,百位拼接上正确的字符串,打印即可
System.out.println("整数"+num+"个位为"+ge);
System.out.println("整数"+num+"十位为"+shi);
System.out.println("整数"+num+"百位为"+bai);
}
}
自增自减运算符
- 注意事项:
- 单独操作的时候
- 如果放在变量的后边,先将该变量原本的值,取出来参与操作,随后再进行自增(++),自减(—)
- int a =10;
- int b = a++
- 如果放在变量的前边,先对变量做自增(++)或者自减(—),然后再拿变量操作
- int a =10;
- int b = ++a;
最常见的用法:单独使用
package test;
/*
* 参与操作:
* ++在前:先对该变量做自增(++)或者自减(--),然后再拿变量参与操作
* ++在后:先将该变量原本的值,取出来参与操作,随后再进行自增(++),自减(--).
* */
public class code04 {
public static void main(String[] args) {
//++在前;先对该变量做自增(++)或者自减(--),然后再拿变量参与操作.
int a = 10;
int b =++a;
System.out.println(a); //11
System.out.println(b); //11
//++在后:先将该变量原本的值,取出来参与操作,随后再进行自增(++),自减(--)。
int aa =10;
//bb = 10
int bb = aa++; // aa = 11
System.out.println(aa); //11
System.out.println(bb); //10
int num = 123;
System.out.println(num++); //123
System.out.println(num); //124
// System.out.println(10++); 这是错误代码,因为不能操作常量
}
}
赋值运算符
package test;
/*
* 阅读下列代码,查看是否存在问题,如果有请指出并修正
* */
public class code05 {
public static void main(String[] args) {
short s = 1;
//s是short类型,1默认是Int类型
//short和int相加,short会先提升为int,然后再进行运算
//提升之后,就是两int相加,两个int相加,结果还是int,将int赋值给short
//需要加入强转
//s = s + 1; //错误: 不兼容的类型:从int转换到short可能会有损失
s = (short)(s+1);
System.out.println(s);
short ss = 1;
ss +=1; //ss = (short) (ss + 1)
//注意:扩展赋值运算符底层会自带转换功能
System.out.println(ss);
}
}
关系运算符
注意事项:
关系运算符的结果都是boolean类型,要么是true,要么是false。
千万不要把”==”误写成”=”.
package test;
/*
* 关系运算符(比较运算符):
* (>)(>=) (<) (<=) (==) (!=)
* */
public class code06 {
public static void main(String[] args) {
System.out.println(10 > 20); //false
System.out.println(10 >= 20); //false
System.out.println(10 < 20); //true
System.out.println(10 <= 20); //true
System.out.println(10 == 20); //false
System.out.println(10 != 20); //true
}
}
逻辑运算符
在数学中,一个数据,大于5,小于15,我们可以这样来进行表示:5<x<15
在java中,需要把上面的式子先进行拆解,再进行合并表达。
- 拆解为: x>5和x<15
- 合并后:x>5 & x<15
&其实就是一个逻辑运算符
我们可以这样说,逻辑运算符,是用来连接关系表达式的运算符
当然,逻辑运算符也可以直接连接布尔类型的常量或者变量
package test;
/*
* 逻辑运算符分类:
* &(与):并且 : 并且,遇false则false,只有符号左右两边同时为true,结果才为true
* !(或):或者 : 或者,遇true则true,只有符号左边两边同时为false,结果才为false
* !(非):取反 : 取反
* ^(异或): 相同为false,不同为true
* */
public class code07 {
public static void main(String[] args) {
//&(与):并且
System.out.println(true & true); //true
System.out.println(false & false); //false
System.out.println(true & true); //true
System.out.println(false & false); //false
System.out.println("-----------------------");
// |(或):或者
System.out.println(true | true); //true
System.out.println(false | false); //false
System.out.println(true | false); //true
System.out.println(false | true);
System.out.println("-----------------------");
// !(非):取反
System.out.println(!true); //false
System.out.println(!!true); //true
System.out.println("-----------------------");
// ^(异或):
System.out.println(true ^ true); //false
System.out.println(false ^ false); //false
System.out.println(true ^ false); //true
System.out.println(false ^ true); //true
}
}
短路逻辑运算符
- 注意事项
- 逻辑与&,无论左边真假,右边都要执行
- 短路与&&,如果走边为真,走边执行;如果左边为假,右边不执行。
- 逻辑或|,无论左边真假,右边都要执行
- 逻辑或||,如果左边为假,右边执行;如果左边为真,右边不执行
三元运算符
- 格式:关系表达式?表达式1:表达式2:
1、三元(目)运算符的格式:(关系运算符) ?表达式1 :表达式2
根据关系运算符的结果,来判断,如果关系运算符的结果为true,则值为表达式1,否则为表达式2。
2、用三元表达:式取两个数最大值
public static void main(String[] args){
int x = 10;
int y = 5;
int z;
z = (x > y) ? x : y;
System.out.println(z); //10
3、案例:比较两个整数是否相同:
public static void main(String[] args){
int x = 10;
int y = 5;
String b = (x == y) ? "相等" : "不相等";
System.out.println(b); //不相等
}
4、案例:比较三个整数中的最大值:
public static void main(String[] args){
int x = 10;
int y = 5;
int z = 15;
int t = (x > y) ? x : y;
int m = (t > z) ? t : z;
System.out.println(m);
}
案例练习
三个和尚练习题
分析:
定义三个变量用于保存和尚身高,单位为cm,这里仅仅体现数值即可
- int height1 = 150
- int height2 = 210
- int height3 = 165
用三元运算符,比较前两个变量,获取较大值
- int tempHeight = (height1 > height2)? height1 : height2;
用三元运算符,让较大值和第三个变量比较,获取最大值。
代码
package code1;
import java.util.Scanner;
class code2 {
/*
步骤1:导包,需要写在class的上面
import java.util.Scanner;
步骤2:创建对象
Scaner sc = new Scanner(System.in);
只有SC可以改变,其他属于固定模式
步骤3:使用变量接受数据
int i = SC.nextInt();
只有变量可以改变其他属于固定模式
*/
public static void main(String[] args) {
Scanner SC = new Scanner(System.in); //创建键盘录入对象
//键盘录入练习:键盘录入两个数据,获取这两个数据中的最大值
System.out.println("请输入第一个整数:");
int a = SC.nextInt(); //将键盘录入的数据存储到i中
System.out.println("请输入第二个整数:");
int b = SC.nextInt(); //将键盘录入的数据存储到a中
System.out.println("请输入第三个整数:");
int c = SC.nextInt();
int t = (a > b) ? a : b;
int max = (c > b) ? c : a;
System.out.println("max="+max);
}
}