03运算符
总结
标识符
标识符的命名规则和规范
标识符概念
1.java对各种变量、方法和类等命名时使用的字符序列称为标识符
2.凡是自己可以起名字的地方都叫标识符 int num = 90;
⊙标识符的命名规则
1.由26个英文字母大小写,0-9,_或$组成
2.数字不可以开头。int 3ab = 1;
3.不可以使用关键字和保留字,但能包含关键字和保留字
4.Java中严格区分大小写,长度无限制。 int totalNum = 10; int n =9;
5.标识符不能包含空格 int a b = 90;//错误
进制
二进制是逢2进位的进位制,0、1是基本算符。
进制介绍
对于整数,有四种表示方式
1.二进制:0,1,满2进1.以0b或0B开头
2.十进制:0-9,满10进1
3.八进制:0-7,满8进1.以数字0开头表示。
4.十六进制:0-9及A(10)-F(15),满16进1.以0x或0X开头表示。此处的A-F不区分大小写。b11 c12 d13 e14 f15
如:
//n1 二进制
int n1 = 0b101010;
//n2 十进制
int n2 = 101010;
//n3 八进制
int n3 = 010101;
//n4 十六进制
int n4 = 0x101010;
System.out.println("n1=" + n1);//42
System.out.println("n2=" + n2);//101010
System.out.println("n3=" + n3);//4161
System.out.println("n4=" + n4);//1052688
进制图:
十进制 十六进制 八进制 二进制
0 0 0 0
1 1 1 1
2 2 2 10
3 3 3 11
4 4 4 100
5 5 5 101
6 6 6 110
7 7 7 111
8 8 10 1000
9 9 11 1001
10 A 12 1010
11 B 13 1011
12 C 14 1100
13 D 15 1101
14 E 16 1110
15 F 17 1111
16 10 20 10000
17 11 21 10001
进制转换
第一组:
二进制转十进制
请将0b1001转成十进制的数//9
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和
0b1001 = 1*2^(1-1)+0*2^(2-1)+0*2(3-1)+1*2^(4-1)
八进制转十进制
规则:从最低(右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和
请将0234转成十进制的数//156
0234=4*8^0 + 3*8^1 + 2*8^2
十六进制转十进制
规则:从最低(右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和
请将0x23A转成十进制的数//570
0x23A=10*16^0 + 3*16^1 + 2*16^2
第二组:
十进制转二进制
规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。
请将34转成二进制//0b100010
十进制转八进制
规则:将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的八进制。
请将131转成八进制//0203
十进制转十六进制
规则:将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制
请将237转成十六进制//0xED
练习:
123转成二进制//1111011
678转成八进制//1246
8912转成十六进制//0x22do
第三组:
二进制转八进制
规则:从低位开始,将二进制数每三位一组,转成对应的八进制数即可
请将0b10010101转成八进制转成八进制//0325
二进制转十六进制
规则:从低位开始,将二进制数每四位一组,转成对应的十六进制数即可
请将0b11010101转成十六进制//0xD5
练习:
0b11(3)100(4)101(5)转成八进制//345
0b11(3)1001(9)0110(7)转成十六进制//0x396
第四组:
八进制转二进制
规则:将八进制数每一位,转成对应的一个三位的二进制数即可。
请将0237转成二进制//0b10011111
十六进制转二进制
规则:将十六进制数每一位,转成对应的一个四位的二进制数即可。
请将0x23B转成二进制//0b1000111011
运算符
运算符是一种特殊的符合,用以表示数据的运算、赋值和比较等。
原码、反码、补码
1.二进制的最高位是符号位:0表示正数,1表示负数(口诀:0→0,1→-)
2.证书的原码,反码,补码都一样(三码合一)
3.负数的反码=它的原码符号位不变,其它位取反(0→1,1→0)
4.负数的补码=它的反码+1,负数的反码=负数的补码-1
5.0的反码,补码都是0
6.java没有无符号数,换言之,java中的数都是有符号的
7.在计算机运算的时候,都是以补码的方式来运算的
8.当我们看运算结果的时候,要看他的源码
运算符优先级
运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如:
. () {} ; ,
R→L ++ __ ~ ! (data type)
L→R * / %
L→R + -
L→R << >> >>> 位移
L→R < > <= >= instanceof
L→R == !=
L→R &
L→R ^
L→R |
L→R &&
L→R ||
L→R ? :
R→L = *= /= %=
+= -= <<= >>=
>>>= &= ^= |=
只有单目运算符、赋值运算符是从右向左运算的
1.(),{}等
2.单目运算++ --
3.算数运算符
4.位移运算符
5.比较运算符
6.逻辑运算符
7.三元运算符
8.赋值运算符
1、算术运算符
算术运算符是对数值类型的变量进行运算的,在java程序中使用的非常多
1.+,—,*,/,%,++,——,重点讲解/、%、++
2.自增:++
作为独立的语句使用:
前++和后++都完全等价于 i = i + 1;
前++:++i先自增后赋值
后++:i++先复制后自增
3.——,+、-、*是一个道理,完全可以类推
算术运算符练习
1.//结果为多少
int i = 1;
i = i++;//规则使用临时变量:1、temp=i;2/i=i+1;3/i=temp;
System.out.println(i);//1
int a = 1;
a = ++a;规则使用临时变量://1、a=a+1;2、temp=a;/3、a=temp;
System.out.println(a);//2
2.自增,自减课堂练习,看看输出什么
int i1 = 10;
int i2 = 20;
int i = i1++;
System.out.println("i=" + i);//10
System.out.println("i=" + i1);//11
int a = --i2;
System.out.println("a=" + a);//19
System.out.println("i2=" + i2);//19
3.假如还有59天放假,问:合XX个星期零XX天。
/* 2.思路分析
1、使用int变量days保存天数
2、一个星期是7天 星期数:days/7零XX天days%7
3、输出
*/
int days = 59;//天
int weeks = days/7;//星期
int leftDays = days%7;//几天
System.out.println("还有"+weeks+"个星期"+"零"+leftDays+"天");
4.定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为://5/9*(华氏温度-100),请求出华氏温度对应的摄氏温度。[234.5]
2.思路分析:
1、先定义一个double huaShi 变量保存 华氏温度
2、根据给出的公式,进行计算即可5/9*(华氏温度-100);
3、将得到的结果保存到double sheShi
3.输出
*/
double huaShi = 234.6;
double sheShi = 5.0 / 9 * (huaShi - 100);
System.out.println("华氏温度" + huaShi + "对应的摄氏温度" + sheShi);
2、赋值运算符
赋值运算符就是将某个运算后的值,付给指定的变量
赋值运算符的分类
基本赋值运算符:int a = 10;
复合赋值运算符:
+=,-=,*=,/=,%=等,
a += b;[等价a = a+b;]
a -= b;[等价a = a-b;]
案例演示
赋值基本案例[int num1 = 10;]
+=的使用案例
int n1 = 10;
n1 += 4;//n1=n1+4
System.out.println(n1);//14
n1 /= 3;//n1=n1/3
System.out.println(n1);//4
赋值运算符特点
运算顺序从右往左 int num = a + b + c;
赋值运算符的左边 只能是变量,右边可以是变量、表达式、常量值
int num = 20; int num2 = 78*34-10; int num3 = a;
复合赋值运算符等价于下面的效果,如:
a += 3//a = a+3;
复合赋值运算符会进行类型转换。
byte b = 2; //b=(byte)(b+2);
b++;//b=(byte)(b+1);
3、关系运算符[比较运算符]
1.关系运算符的结果都是boolean型,也就是要么true,要么是false
2.关系表达式经常用在if结构的条件中或循环结构的条件中
int a = 9;//开发中不可以使用a a1 b1
int b = 8;
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);//F
System.out.println(a != b);//T
boolean flag = a > b;//T
细节说明
1.关系运算符的结果都是Boolean型,也就是要么是true,要么是false。
2.关系运算符组成的表达式,我们称为关系表达式。a>b
3.比较运算符"=="不能写成"="
4、逻辑运算符
用于连接多个条件(多个关系表达式),最终的结果也是一个boolean值。
a b a&b a&&b a|b a||b !a a^b
true true true true true true fasle false
true fasle false false true true false true
false true false false true true true true
false false false false fasle false true false
说明逻辑运算规则:
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
&&和&基本规则
名称 语法 特点
短路与&& 条件1&&条件2 两个条件都为true,结果为true,否则false
逻辑与& 条件1&条件2 两个条件都为true,结果为true,否则false
&&和&案例演示
演示&&和&运算符的使用
//演示&&的使用
int age = 30;
if(age > 20 && age < 90 ){
System.out.println("ok");
}
//&的使用
if(age > 20 && age < 40 ){
System.out.println("hello");
}
//区别
int a = 4;
int b = 9;
//对于&&短路与而言,如果第一个条件为false,后面的条件不再判断
if(a < 1 && ++b > 60){
System.out.println("你好");
}
System.out.println("a=" + a + " b=" + b);//4 9
//对于&逻辑与而言,如果第一个条件为false,后面的条件继续判断。
if(a < 1 & ++b > 60){
System.out.println("你好");
}
System.out.println("a=" + a + " b=" + b);//4 10
&&和&使用区别
1.&&短路与:如果第一个条件为false,则第二个条件不会判断,最终结果为false,效率高
2.&逻辑与:不管第一个条件是否为false,第二个条件都要判断,效率低
3.开发中,我们使用的基本是短路与&&,效率高
||和|基本规则
名称 语法 特点
短路或|| 条件1||条件2 两个条件中只要有一个成立,结果为true,否则为false
逻辑或| 条件1|条件2 只要一个条件成立,结果为true,否则为false
||和|案例演示
||的使用
int age = 30;
if(age > 20 || age < 20 ){
System.out.println("ok");//条件1为true直接true
}
|的使用
if(age > 20 | age < 40 ){
System.out.println("hello");//条件1为true还要判断第二个条件在true
}
||和|使用区别
1.短路或||:如果第一个条件为true,则第二个条件不会判断,最终结果为true,效率高
2.逻辑或|:不管第一个条件是否为true,第二个条件都要判断,效率低
3.开发中,我们基本使用||
!取反基本规则
名称 语法 特点
!非(取反) !条件 如果条件本身成立,结果为false,否则为true
!案例演示
案例演示
//!操作是取反 T→F, F→T
System.out.println(60>20);//true
System.out.println(!(60>20));//flase
^案例演示
a^b:逻辑异或,当a和b不同时,则结果为true,否则为false
^逻辑异或,System.out.println((4<1)^(6>3));//?true
boolean b = (10 > 1) ^ (3 < 5);
System.out.println("b=" + b);//flase
逻辑运算符练习题
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
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
boolean x = true;
boolean y = false;
short z = 46
if((z++==46)&&(y=true)) z++;//false
if((x=false)||(++z==49)) z++;
System.out.println("z="+z);
5、位运算符[需要二进制基础]
java中有7个位运算(&、|、^、~、>>、<<和>>>);
分别是:按位与&、按位或|、按位异或^、按位取反~,
它们的运算规则是:
按位与&:两位全为1,结果为1,否则为0
按位或|:两位有一个为1,结果为1,否则为0
按位异或^:两位一个为0,一个为1,结果为1,否则为0
按位取反~:0→1,1→0
算术右移>>:低位溢出,符号位不变,并用符号位补溢出的高位
算数左移<<:符号位不变,低位补0
逻辑右移>>>:逻辑右移也叫无符号右移,运算规则是:低位溢出,高位补0
特别说明:没有<<<符合
如:
2&3=? ~-2=? ~2=?
/*
1、 先得到2的补码=>2的源码00000000 00000000 00000000 00000010
2的补码 00000000 00000000 00000000 00000010
2、 3的补码 3的原码00000000 00000000 00000000 00000011
3的补码 00000000 00000000 00000000 00000011
3、按位&
00000000 00000000 00000000 00000010
00000000 00000000 00000000 00000011
00000000 00000000 00000000 00000010 &
/
System.out.println(2&3);//2
/
1、先得到 -2的原码 10000000 00000000 00000000 00000010
2、-2的反码 11111111 11111111 11111111 11111101
3、-2的补码 11111111 11111111 11111111 11111110
4、~-2操作 00000000 00000000 00000000 00000001运算后的补码
5、运算后的源码 就是 00000000 00000000 00000000 00000001
/
System.out.println(~-2);//1
/
1、得到2的补码 00000000 00000000 00000000 00000010
2、~2操作 11111111 11111111 11111111 11111101
3、运算后的反码 11111111 11111111 11111111 11111100
4、运算后的原码 10000000 00000000 00000000 00000011
*/
System.out.println(~2);//-3
int a=1>>2;1→00000001→00000000本质1/2/2=0
int c=1<<2;1→00000001→00000000本质1*2*2=4
//a,b,c,d,e结果为多少
int a=1>>2;//1向右位移2位
int b=-1>>2;//
int c=1<<2;//
int d=-1<<2;//
int e=3>>>2;//无符号右移
~2=?//按位取反
2&3=?//2按位与3
2|3=?//2按位或3
~-5=?//按位取反
13&7=?//13按位与7
5|4=?//5按位或4
-3^3=?//^按位异或
6、三元运算符
基本语法:
条件表达式?表达式1:表达式2;
运算规则:
如果条件表达式为true,运算否的结果是表达式1;
如果条件表达式为false,运算后的结果是表达式2;
案例演示:
int a = 20;
int b = 33;
//解读
//1.a>b为false
//2.返回b--,先返回b的值,然后在b-1
//3.返回的结果是33
int result = a > b ? a ++ : b--;
System.out.println("result=" + result);//33
System.out.println("a=" + a);//20
System.out.println("b=" + b);//32
使用细节:
表达式1和表达式2要为可以赋给接受变量的类型(或可以自动转换)
int a = 2;
int b = 3;
int c = a > b ? (int)3.3 : (int) 4.4;//可以的
double d = a > b ? a : b+3;//可以的,
三元运算符可以转成if-else语句
int res = a>b ? a++:--b;
if(a>b){res=a++;}else{res = b--};
练习
//案例实现三个数的最大值
int n1 = 11;
int n2 = 33;
int n3 = 22;
//思路
//先得到n1和n2中最大数,保存到max1中
//再求出max1和n3谁大,保存到max2中
int max1 = n1 > n2 ? n1 : n2;
int max2 = max1 > n3 ? max1 : n3;
System.out.println("最大数为" + max2);
键盘输入语句
在编程中,需要接受用户输入的数据,就可以使用键盘输入语句来获取。
Input.java,需要一个扫描器(对象),就是Scanner
步骤:
1.导入该类的所在包,java.util.*
2.创建该类对象(声明变量)
3.调用里面的功能
案例演示:
要求:可以从控制台接收用户信息,[姓名,年龄,薪水]。
//1.引入Scanner类所在的包
//2.创建Scanner对象,new 创建一个对象,
//myScanner就是Scanner类的对象
Scanner myScanner = new Scanner(System.in);
//3.接受用户输入了,使用相关的方法
System.out.println("请输入名字");
//当程序执行到next方法时,会等待用户输入。
String name = myScanner.next();//接受用户输入姓名(字符串)
System.out.println("请输入年龄");
int age = myScanner.nextInt();//接受用户输入年龄(int)
System.out.println("请输入薪水");
double sal = myScanner.nextDouble();//接受用户输入薪水(double)
System.out.println("人的信息如下:");
System.out.println("名字:" + name + "\t年龄:" + age + "\t薪水" + sal);
作业
1、计算下列表达式的结果
10/3=3; 10/5=2; 10%2=0; -10.5%3=?;
//a%b当a是小数时,公式=a-(int)a/b*b
//-10.5%3=-10.5-(-10)/3*3=-10.5+9=-1.5
//注意:有小数运算,得到结果是近似值
2、说出下面的代码的结果
int i = 66;
System.out.println(++i+i);134
3、在java中,以下赋值语句正确的是(C、D)。
A. int num1=(int)"18";//错误应该是int num1=Integer.parseInt("18");
B. int num2=18.0;//错误应该是double
C. double num3=3d;//正确
D. double num4=8;//正确
E. int i=48;char ch=i+1;//错误 int不能自动转型char
F. byte b=19;short s=b+2;//错误 b+2时转换成了int类型
4、写出将String转换成double类型的语句,以及将char类型转换成String的语句:
String str = "22.2";//注意字符串要可以被转成double
double d1 = Double.parseDouble(str);
char c1 = '韩';
String str2 = c1 + "";

浙公网安备 33010602011771号