1.运算符相关概念
1.1术语
例如:a+b
“+”是运算符,运算符就是符号。 a和b分别称为操作数。”a+b”这个整体是一个表达式
1.2运算符分类
运算符种类 | 操作符 |
算数运算符 | + - * / % ++ -- |
赋值运算符 | = |
扩展赋值运算符 | += -= *= /= |
关系运算符 | > >= < <= ==(判断两边是不是一样的) != |
逻辑运算符 | &(与) |(或) && || ! ^ |
条件运算符 | ?: |
位运算符 | & | ^ ~ >> << >>> |
2.算数运算符
2.1除和求模
// / %
public class Test01_ChuAndMo{
public static void main(String[] args){
System.out.println(10/3);//3
System.out.println(10/3.0);//3.333333
//最终结果的正负由被除数
System.out.println(10%3);//1
System.out.println(10%-3);//1
System.out.println(-10%3);//-1
System.out.println(-10%-3);//-1
}
}
练习:给一个任意的四位数,求每一位上的数字并输出 2356
public class Test02_ChuAndMo{
public static void main(String[] args){
//1.定义一个数 1234/10=123 1234%10=4
int num=1234;
//2.数进行处理
int ge=num%10;
int shi=num%100/10;
int bai=num%1000/100;
int qian=num/1000;
//3.输出
System.out.println(ge);
System.out.println(shi);
System.out.println(bai);
System.out.println(qian);
}
}
2.2加号
作用:(1)加法运算
(2)正数
(3)字符串拼接
//+
public class Operator03{
public static void main(String[] args){
//加法运算
System.out.println(10+3);//13
//正数
System.out.println(+10);//10
//字符串拼接
int num=456;
System.out.println("num="+num);//num=456
System.out.println(5+6+"7");//117
System.out.println(5+'6'+"7");//597
System.out.println('5'+6+'7');//59+55=114
}
}
2.3自加++
public class Test04_AndAnd{
public static void main(String[] args){
/*
int a=10;
a++;//自加1, 相当于a=a+1;
System.out.println(a);//11
int a=10;
++a;//自加1, 相当于a=a+1;
System.out.println(a);//11
*/
//问题: ++a 和a++ 有区别?
//++a先自加1,然后再参与运算(再使用)
//a++先参与运算,再自加1
/*
int a=10;
int m=a++ +7;
System.out.println(a);//11
System.out.println(m);//10 +7= 17
int a=10;
int m=++a +7;
System.out.println(a);//11
System.out.println(m);//18
*/
int a=5;
System.out.println(a++ + a++ );//11 5+6 7
System.out.println(a++ + ++a );//16 7+9 9
System.out.println(++a + a++ );//20 10+10 11
System.out.println(++a + ++a );//25 12+13 13
}
}
3.赋值运算符
任意给你两个数,然后交换位置
public class Test05_exchange{
public static void main(String[] args){
//任意给你两个数,然后交换位置
//10 20 交换完之后 20 10
//1.给两个数(给死)
int num1=10;
int num2=20;
//2.输出交换前的两个数
System.out.println("交换前:num1="+num1+"\tnum2="+num2);
//3.交换
int temp=0;
temp=num2;
num2=num1;//num1=20, num2=20 temp=10 num1由10变为20,10被覆盖
num1=temp;//num2=10, num1=20
/**int temp=0;
temp=num1;//先将num2的20存起来
num1=num2;//num2=10; num1=10; num2由20变为10,20被覆盖
num2=temp;//num1=20; num2=10;**/
//4.输出交换后的两个数
System.out.println("交换后:num1="+num1+"\tnum2="+num2);
}
}
4.扩展赋值运算符
只看+=
public class Test06_KzFuZhi{
public static void main(String[] args){
int a=10;
int b=20;
//int a=a+b;--->累加
int a+=b;
//3.输出
System.out.println(a);
/*
1.可读性:a=a+b;
2.编译效率:a+=b;高
3.a+=b;进行自动转换
byte\short\char自动转换
1byte 2short 2char --->4int --->8long --->4float--->8double
*/
short s=10;
//s=s+1;//错误: 不兼容的类型: 从int转换到short可能会有损失
s=(short)(s+1);
System.out.println(s);
short s1=10;
s1+=1;
System.out.println("s1="+s1);
}
}
5.关系运算符
public class Test07_GuanXi{
public static void main(String[] args){
System.out.println(4>9);//false
System.out.println(4> =9);//false
System.out.println(4<9);//t
System.out.println(4< =9);//true 小于或者等于
System.out.println(4==9);//f
System.out.println(4!=9);//t
}
}
6.逻辑运算符
6.1&和&&
public class Test08_Luoji{
public static void main(String[] args){
//&:与 & 两边的操作数都是布尔类型,要么是true,要么是false
//&两边都为true的时候结果才为true
System.out.println(true&true);//true
System.out.println(true&false);//false
System.out.println(false&true);//false
System.out.println(false&false);//false
System.out.println("================================");
//&&:与:&两边都为true的时候结果才为true
System.out.println(true&&true);//true
System.out.println(true&&false);//false
System.out.println(false&&true);//false
System.out.println(false&&false);//false
System.out.println("================================");
/*
&&,又叫短路与,更加智能,如果第一个表达式为false,第二个表达式将不参与运算
*/
int m=10;
System.out.println(false && (m++) == 11);//false
System.out.println(m);//10
System.out.println(false & m++==11);//f
System.out.println(m);//11
}
}
6.1|和||
public class Test09_Luoji{
public static void main(String[] args){
//|或 只要一个为true,最终结果就为true
System.out.println(true|true);//true
System.out.println(true|false);//true
System.out.println(false|true);//true
System.out.println(false|false);//false
System.out.println("========================");
// || 或 只要一个为true,最终结果就为true
System.out.println(true||true);//true
System.out.println(true||false);//true
System.out.println(false||true);//true
System.out.println(false||false);//false
System.out.println("========================");
// ||短路或, 智能, 如果第一个表达式为true,第二个表达式不参与运算
int m=10;
System.out.println(true | m++==11);//true m++==11参与运算
System.out.println(m);//11
System.out.println(true || m++==11);//true m++==11没有参与运算
System.out.println(m);//11
System.out.println("========================");
System.out.println(!true);//false
System.out.println(!false);//true
System.out.println("========================");
//^ 异或 两个操作数相同为false, 操作数不同为true
//计算 true1 false是0 0^0=0 0^1=1 1^1=0
System.out.println(true ^ true);//false
System.out.println(true ^ false);//true
System.out.println(false ^ true);//true
System.out.println(false ^ false);//false
//两边之和大于第三条边且两边之差小于第三条边
//a+b>c && a-b<c
//逻辑运算符经常用于连接多个布尔表达式
//判断某一年是否为闰年,
//闰年的条件:能被4整除但是不能被100整除,或者直接能被400整除
//(year%4==0&&year%100!=0)||yea%400==0
//153 153==1的立方+5的立方+3的立方=1+125+27=153 456
int num=153;
boolean res=(num==ge*ge*ge+5*5*5+3*3*3);
System.out.println(num+"是水仙花数吗:"+res);
}
}
7.条件运算符
public class Test10_TiaoJian{
public static void main(String[] args){
int num=5>7?7:5;
System.out.println(num);//7
//?后面两部分的类型要一致。
String str=(4==4)?'相':'不相等';
System.out.println(str);
//作业:求三个数的较大者
}
}
8.位运算符
public class Test11_Wei{
public static void main(String[] args){
//& | ^
byte x=3;//0000 0011
byte y=4;//0000 0100
System.out.println(x&y);//0000 0000---->0
System.out.println(x|y);//0000 0111---->7
System.out.println(x^y);//0000 0111---->7
//System.out.println(~x);// 1111 1100--->1111 1011-->1000 0100-->-4
// <<左移 位运算符跟位有关,二进制
/*
1.十进制的6转换二进制
0000 0110
00 0001 1000--->2的4次幂+2的3次幂=16+8=24
结论:左移几位就相当于乘于2的几次方
*/
byte a=6<<3;// 100--->
System.out.println(a);
// >>右移,有符号位(正负) >>>无符号右移
/*
1.十进制的6转换二进制
0000 0110
0000 0001 10--->2的4次幂+2的3次幂=16+8=24
结论:右移几位就相当于除以2的几次方
*/
a=6>>2;// ---> 6/4
System.out.println(a);
}
}
9.运算符优先级
10.键盘输入
import java.util.*;
public class Test12_Input{
public static void main(String[] args){
//定义扫描仪变量,变量名sc.
Scanner sc= new Scanner(System.in);
System.out.print("请输入一个整数:");
//从键盘接收数据
/*int i = sc.nextInt();
System.out.println("输出整数:"+i);
System.out.print("请输入一个小数:");
double d=sc.nextDouble();
System.out.println("输出小数:"+d);
System.out.print("请输入一个布尔类型:");
boolean b=sc.nextBoolean();
System.out.println("输出小数:"+b);*/
//dalanqiu
System.out.print("请输入一个文本:");
String s=sc.next();
char c=s.charAt(1);
System.out.println("输出文本:"+s);
System.out.println("输出文本:"+c);
}
}
11.作业
[1]定义三个int型变量并赋值,使用三元运算符获取这三个数中的较大数的实现
[2]编写程序,声明2个double型变量并赋值。判断第一个数大于10.0,且第2个数小于20.0,打印两数之和。否则,打印两数的乘积。
[3]交换两个变量值的代码的实现
[4]闰年的判断条件:能被4整除但不能被100整除,或者能被400整除的;若年份是闰年,则输出true,否则false
[5]三角形构成的判断条件:两边和大于第三条边;若三条边构成三角形,则输出true,否则false
[6]如果一个三位数的各个位的立方和等于它本身则为水仙花数,如153=1*1*1+5*5*5+3*3*3,153是水仙花数。若一个数是水仙花数,则输出true,否则false
[7]如何从控制台获取String和int型的变量,并输出?使用代码实现