1.概述
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
1) 算术运算符
2) 赋值运算符
3) 关系运算符 [比较运算符]
4) 逻辑运算符
5) 位运算符 [需要二进制基础]
6) 三元运算符
2.算数运算符
算数运算符是对数值类型的变量进行运算的,在java程序中使用的非常多
2.1 除号 /
//算数运算符 /号
public class Test6
{
public static void main(String[] args)
{
System.out.println(10/4);//2,从数学来看是2.5,但是从java来看就是2
System.out.println(10.0/4);
double d1 = 10/4;
System.out.println(d1);//2.0
}
}
2.2 取模% 63
2.2.1在java中%的本质,看一个公式a%b=a-a/b*b
//取模%
//在java中%的本质,看一个公式a%b=a-a/b*b
public class Test6
{
public static void main(String[] args)
{
System.out.println(10%3);//1
System.out.println(-10%3);//-1, -10-(-10)/3*3=-10+9=-1
System.out.println(10%-3);//1, 10-10/(-3)*(-3)=10-9=1
System.out.println(-10%-3);//-1, (-10)-(-10)/(-3)*(-3)=-10+9=-1
}
}
2.3 运算符++
--与++规则一致
前置++,先++后使用
后置++,先使用后++
//运算符++
//前置++,先++后使用
//后置++,先使用后++
public class Test6
{
public static void main(String[] args)
{
int i = 10;
i++;//11
++i;//12
System.out.println("i="+i);//12
//前置++
int j = 8;
int k = ++j;
System.out.println("j="+j+" k="+k);// 9 9
//后置++
int a = 8;
int b = a++;
System.out.println("a="+a+" b="+b);//9 8
}
}
3.面试题练习
例1
注意:i=i++;//后置++三步走:(1) temp=i;(2) i=i+1;(3)i=temp;
public class Test6
{
public static void main(String[] args)
{
int i=1;
i=i++;//三步走:(1) temp=i;(2) i=i+1;(3)i=temp;
System.out.println(i);//1
}
}
例2
i=++i;//前置++三步走:(1)i=i+1;(2)temp=i;(3)i=temp;注意此式三步走与上式顺序不同
//例2
public class Test6
{
public static void main(String[] args)
{
int i=1;
i=++i;//三步走:(1)i=i+1;(2)temp=i;(3)i=temp;注意此式三步走与上式顺序不同
System.out.println(i);//2
}
}
测试输出
//测试输出
public class Test6
{
public static void main(String[] args)
{
int a1=10;
int a2=20;
int a=a1++;
System.out.println("a="+a);//10
System.out.println("a2="+a2);//20
a=--a2;
System.out.println("a="+a);//19
System.out.println("a2="+a2);//19
}
}
4.练习 66
练习1
2.思路分析
(1) 使用 int 变量 days 保存 天数
(2) 一个星期是 7 天 星期数 weeks: days / 7 零 xx 天 leftDays days % 7
(3) 输出
//课堂练习1
//假如还有 59 天放假,问:合 xx 个星期零 xx 天
public class Test6
{
public static void main(String[] args)
{
int days=59;
int weeks = days/7;//多少个星期
int leftdays = days%7;//零多少天
System.out.println(weeks+"个星期零"+leftdays+"天");//8个星期零3天
}
}
练习2
课堂练习2
定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为:5/9*(华氏温度-100),请求出华氏温度对应的摄氏温度。 [234.5]
2 思路分析
(1) 先定义一个 double huaShi 变量保存 华氏温度
(2) 根据给出的公式,进行计算即可 5/9*(华氏温度-100)
考虑数学公式和 java 语言的特性
(3) 将得到的结果保存到 double sheShi
3 走代码
//定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为:5/9*(华氏温度-100),请求出华氏温度对应的摄氏温度。 [234.5]
public class Test6
{
public static void main(String[] args)
{
double huashi = 234.5;
double sheshi = 5.0/9*(huashi-100);//5/9*(华氏温度-100) 这里的5/9计算机直接认为的0了所以要用5.0/9
System.out.println("华氏温度"+huashi+"对应的摄氏温度是"+sheshi);
}
}
5. 关系运算符
1) 关系运算符的结果都是 boolean 型,也就是要么是 true,要么是 false
2) 关系表达式 经常用在 if 结构的条件中或循环结构的条件中
5.1 关系运算符概图
5.2 例1
//关系运算符
public class Test7
{
public static void main(String[] args)
{
int a = 9;//提示: 工作开发中,不要将变量写的这么简单例如 a, b
int b = 8;
System.out.println(a>b);//T
System.out.println(a>=b);//T
System.out.println(a<=b);//F
System.out.println(a<b);//F
System.out.println(a==b);//F
System.out.println(a!=b);//T
boolean flag = a>b;
System.out.println("flag="+flag);//true
}
}
关系运算符注意细节
2) 关系运算符组成的表达式,我们称为关系表达式。 a > b
3) 比较运算符"=="不能误写成"="
6. 逻辑运算符
用于连接多个条件(多个关系表达式),最终的结果也是一个 boolean 值
6.1 说明逻辑运算规则:
1) a&b : & 叫逻辑与:规则:当 a 和 b 同时为 true ,则结果为 true, 否则为 false
2) a&&b : && 叫短路与:规则:当 a 和 b 同时为 true ,则结果为 true,否则为 false
3) a|b : | 叫逻辑或,规则:当 a 和 b ,有一个为 true ,则结果为 true,否则为 false
4) a||b : || 叫短路或,规则:当 a 和 b ,有一个为 true ,则结果为 true,否则为 false
5) !a : 叫取反,或者非运算。当 a 为 true, 则结果为 false, 当 a 为 false 是,结果为 true
6) a^b: 叫逻辑异或,当 a 和 b 不同时,则结果为 true, 否则为 false
6.2 概图
7. &&(短路与)和&(逻辑与)的使用 71
7.1 规则
名称 语法 特点
短路与&& 条件 1&&条件 2 两个条件都为 true,结果为 true,否则 false
逻辑与& 条件 1&条件 2 两个条件都为 true,结果为 true,否则 false
7.2 &&(短路与)和&(逻辑与)的区别
1) &&短路与:如果第一个条件为 false,则第二个条件不会判断,最终结果为 false,效率高
2) & 逻辑与:不管第一个条件是否为 false,第二个条件都要判断,效率低
//&&(短路与)和&(逻辑与)的使用
public class Test7
{
public static void main(String[] args)
{
//&&(短路与)的使用
int age = 50;
if(age>20 && age<90)
{
System.out.println("ok100");
}
//&(逻辑与)的使用
if(age>20 & age<90)
{
System.out.println("ok200");
}
//区别
//1) &&短路与:如果第一个条件为 false,则第二个条件不会判断,最终结果为 false,效率高
//2) & 逻辑与:不管第一个条件是否为 false,第二个条件都要判断,效率低
int a = 4; int b = 9;
//if(a < 1 && ++b < 50)
// {
//System.out.println("ok300");
//}
//System.out.println("a=" + a + " b=" + b);// 4 9
if(a < 1 & ++b < 50)
{
System.out.println("ok300");
}
System.out.println("a=" + a + " b=" + b);// 4 10
}
}
8. ||(短路或)和|(逻辑或)的使用 72
8.1规则
名称 语法 特点
短路或|| 条件 1||条件 2 两个条件中只要有一个成立,结果为 true,否则为 false
|逻辑或 条件 1|条件 2 只要有一个条件成立,结果为 true,否则为 false
8.2||(短路或)和|(逻辑或)区别
(1)||短路或:如果第一个条件为 true, 则第二个条件不会判断,最终结果为 true,效率高
(2)| 逻辑或:不管第一个条件是否为 true,第二个条件都要判断,效率低
public class Test7
{
public static void main(String[] args)
{
//||(短路或)的使用
int age = 50;
if(age>20 || age<30)
{
System.out.println("ok100");
}
//|(逻辑或)的使用
if(age>20 | age<30)
{
System.out.println("ok200");
}
//区别
//(1)||短路或:如果第一个条件为 true, 则第二个条件不会判断,最终结果为 true,效率高
//(2)| 逻辑或:不管第一个条件是否为 true,第二个条件都要判断,效率低
int a = 4; int b = 9;
// if(a > 1 || ++b >4 )//短路或
// {
// System.out.println("ok300");
// }
// System.out.println("a=" + a + " b=" + b);// 4 9
if(a > 1 | ++b > 4)//逻辑或
{
System.out.println("ok300");
}
System.out.println("a=" + a + " b=" + b);// 4 10
}
}
9. 取反!和^异或 73
9.1 规则
!取反,真变假,假变真
异或,相同为假,不同为真
9.2 例
//取反!和^异或
public class Test7
{
public static void main(String[] args)
{
//!取反,真变假,假变真
System.out.println(60>20);//T
System.out.println(!(60>20));//F
//异或,相同为假,不同为真
boolean b1 = (10>1)^(3<5);
System.out.println("b1="+b1);//F
boolean b2 = (10>1)^(3>5);
System.out.println("b2="+b2);//T
}
}
10. 逻辑运算符练习 74
10.1 例1
public class Test7
{
public static void main(String[] args)
{
// int x = 5;
// int y = 5;
// if(x++==6 & ++y==6)
// {
// x=11;
// }
// System.out.println("x="+x+"y="+y);//6 6
int x = 5;
int y = 5;
if(x++==6 && ++y==6)
{
x=11;
}
System.out.println("x="+x+"y="+y);//6 5
}
}
10.2 例2
public class Test7
{
public static void main(String[] args)
{
int x = 5;
int y = 5;
if(x++==5 | ++y==5)
{
x=11;
}
System.out.println("x="+x+"y="+y);//11 6
// int x = 5;
// int y = 5;
// if(x++==5 || ++y==5)
// {
// x=11;
// }
// System.out.println("x="+x+"y="+y);//11 5
}
}
10.3 例3
public class Test7
{
public static void main(String[] args)
{
boolean x = true;
boolean y = false;
short z=46;
if((z++==46)&&(y=true))
z++;
if((x=false)||(++z==49))
z++;
System.out.println(z);//50
}
}