表达式
表达式就是运算符、操作数以及方法调用的序列,用来说明某个计算过程并返回计算结果. 按照运算符功能来分,基本的运算符分包括算术运算符、关系运算符、位运算符、条件运算符等
- 算术运算符 +、-、*、/、%、++、--
- 关系运算符 >、<、>=、<=、==、!=
- 逻辑运算符 &&、 ||、 !。注意:逻辑计算支持短路操作
- 位运算符 &、|、^、~、<< 、 >>、>>>。注意:为运算符不支持短路操作[考点]
- 赋值运算符 =,+=,―=,*=,/=
- 三目条件运算符(?:)规则是完全一致的,使用的形式是: x ? y:z;
算术运算符 +、-、*、/、%、++、--
+-*/
整除:参与运算的双方都是整数 10/3=3而不是3.33333
如果是10./3=3.333...这里由于10.是浮点数,则3会自动转换为大类型并参与计算,所以最终是10.0
/3.0的计算结果
计算次序为先乘除后加减,如果优先级一致,则自动从左向右进行计算 10+2*5=20
/除法分母不能为0,否则出错
% 求余(取模) 10%3=1实际就是10除以3求余数
double k=10.12;
System.out.println(k%3);
输出:1.1199999999999992 应该返回值为1.12,由于浮点数不能精确存放,所以返回值是一个类似值
double d1=-10.12;
double res=d1%3;
System.out.println(res);
输出值为-1.1199999999999992 求余计算中符号位不参与计算
double dd=12.45;
System.out.println(dd%3.1); //0.049999999999998934
++和--是单目运算符
i++等价于i=i+1,i--等价于i=i-1
以++为例写法有2个:i++或者++i考核题目
i++是先获取i的值,然后再对i加1
int age=100;
System.out.println(age++);输出为100
System.out.println(age); 输出为101,因为上面进行加1
++i是先对i加1,然后再获取i的值
int age=100;
System.out.println(++age);输出101,先加1然后获取值
System.out.println(age); 输出101
public class Oper11 {
public static void main(String[] args) {
int k = 0;
int res = k++ + k++ + k;
System.out.println(res); //3
int m = 0;
res = ++m + m++ + m;
System.out.println(res); //4
}
}
关系运算符 >、<、>=、<=、==、!=
用于判断两个数据之间的大小关系,计算结果为boolean,如果成立返回为true,否则为false
double d1=10;
System.out.println(d1>3); 返回true
==和=的区别:
k=100;这是赋值运算符,意思是将=右边的计算结果储存在=左边的变量中
k==100这是比较计算符,意思是判断k是否值为100;如果是则返回true,否则false
!=意思是判断是否不等于,表示如果相等时返回false,否则返回true
k!=100不等于判定,如果k值为100则返回false,如果k值不是100则返回true
由于浮点数无法精确存放,所以判断k==1.0这个写法是错误的
正确写法: a-b的绝对值小于1e-6
Java提供了一个工具类Math,其中包含一个abs()的方法实现求绝对值
Math.abs(d1-1)<1e-6 判断浮点类型的变量d1的值是否为1
浮点数的比较
double res = 0;
for(int i=0;i<10;i++)
res=res+0.1;
if(Math.abs(res-1)<1e-6) //|res-1|判断是否小于10的-6次方
System.out.println("计算结果为1");
else
System.out.println("计算结果不为1");
System.out.print("请输入身高:");
Scanner sc = new Scanner(System.in);
double height = sc.nextDouble();
System.out.println("请输入体重:");
double weight = sc.nextDouble();
//算法的问题 BMI指数
double bmi = weight / height / height;
System.out.println("您的bmi指数为:" + bmi);
逻辑运算符 &&、 ||、 !
注意:逻辑计算支持短路操作
表达多个条件之间的关系。例如年龄大于等于18并且年龄小于65
&&:与运算,含义是两个条件必须同时成立,可以翻译为并且
年龄大于等于18并且年龄小于65
age>=18 && age<65
算法规则:同真则真,其余为假
||:或运算,含义是两个条件中成立一个即可,可以翻译为或者
年龄小于18岁或者年龄不小于65
age<18 || age>=65
算法规则:同假则假,否则为真
!:非运算,含义是不是,用于对某个条件进行否定
年龄不小于18
写法1:age >=18 写法2: !(age<18) 算法规则:非真则假,非假则真
短路运算
例如:A && B:如果条件A为false,则不会执行B,因为根据运算规则结果一定是false,和B的值没有关系
A||B:如果条件A为true,则不会执行B,因为格局运算规则结果一定是true,和B的值没有关系
int age=100;
char cc='A';
if(cc>='B' || age++<200){
System.out.println("ZZZZZ");
}
System.out.println(age);//?输出101
int age=100;
char cc='A';
if(cc>='B' && age++<200){
System.out.println("ZZZZZ");
}
System.out.println(age);//?输出100,因为短路的原因,导致age++并没有得到执行
int age=200;
char cc='A';
if(cc>='B' || age++<=200){
System.out.println("ZZZZZ");
System.out.println(age);//?输出201
}
赋值运算符 =,+=,-=,*=,/=,%=
int k=100; 含义是将100赋值存储在k对应的存储单元中
k=k+3可以简写为k+=3 -= */ /=类似
short k=3;
k=k+3; //出现了一个语法错误,因为k+3这里的3系统识别为int类型,所以计算时所有数据自动转换为 int类型,必然计算结果也是int类型,将int类型的数据赋值给short类型变量----错误
System.out.println(k);
short k=3;
k+=3; //没有语法错误,因为+=这种符号中包含了自动类型转换