Java学习-第一部分-第一阶段-第三节:运算符
运算符
笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html)
运算符介绍
算数运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
+ | 正号 | +7 | 7 |
- | 负号 | b=11; -b | -11 |
+ | 加 | 9+9 | 18 |
- | 减 | 10-8 | 2 |
* | 乘 | 7*8 | 56 |
除 | 9/9 | 1 | |
% | 取模(取余) | 11%9 | 2 |
++ | 自增(前):先运算后取值 自增(后):先取值后运算 |
a=2;b=++a; a=2;b=a++; |
a=3;b=3 a=3;b=2 |
-- | 自减(前):先运算后取值 自减(后):先取值后运算 |
a=2;b=--a a=2;b=a-- |
a=1;b=1 a=1;b=2 |
+ | 字符串相加 | "hsp" +"edu" | "hspedu" |
**
*演示算术运算符的使用
*/
public class ArithmeticOperator {
//编写一个main方法
public static void main(String[] args) {
///使用
System.out.print1n(10 / 4);//从数学来看是2.5,java中 2
System.out.println(10.0 / 4);//java是2.5
//注释快捷键ctrl +/,再次输入ctrl +/取消注释
//double d = 10 / 4;
//System.out.println(d);
//注释快捷键ctrl +/,再次输入ctrl +/取消注释
double d = 10/4;//java中10/ 4 = 2,2=>2.0
System.out.println(d);//是2.0
//%取模,取余
//在%的本质看一个公式a % b = a - a/ b * b
//-10 %3 =>-10 -(-10)/3 * 3 = -10 + 9= -1
// 10 %-3 = 10 - 10/(-3)*(-3) = 10 - 9 = 1
// -10 % -3=(-10) - (-10)/ (-3)*(-3)= -10 +9 = -1
System.out.print1n(10 % 3);//1
System.out.println( -10 %3);// -1
System.out.println(10 % -3);// 1
System.out.println( -10%-3);//-1
//++的使用
//
int i = 10;
i++;//自增等价于i = i + 1;=>i = 11
++i;//自增等价于i = i + 1;=> i = 12
System.out.println( "i=" + i);//12
/*
作为表达式使用
前++∶++i先自增后赋值
后++∶ i++先赋值后自增
*/
int j = 8;
int k = ++j;//等价j=j+1;k=j;
int k = j++;//等价k =j;j=j+1;
System.out.println("k="+k+“j="+j);
}
}
面试题
1.面试题1
int i=1;
i=i++; //规则使用临时变量:(1) temp=i;(2) i=i+1;(3)i=temp;
System.out.println(i);
问:结果是多少?为什么?
2.面试题2
int i=1;
i=++i; //(1) i=i+1;(2) temp=i;(3)i=temp;
System.out.println(0);
答案:
1
2
练习题
//自增,自减练习
int i1 = 10;
int i2 =20;
int i= i1++;
System.out.print("i="+i); //10
System.out.println("i2="+i2); //20
i = --i2;
System.out.print("i="+i); //19
System.out.println("i2="+i2); //19
练习题2
-
假如还有59天放假,问:合xx个星期零xx天
int i=59; System.out.println(59/7+"星期零"+59%7+"天");
-
定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为:5/9*(华氏
温度-100),请求出华氏温度对应的摄氏温度。[234.5]double i=234.5; double x; x=(i-100)*5/9; System.out.println(x);
关系运算符
-
关系运算符的结果都是boolean型,也就是要么是true,要么是false
-
关系表达式经常用在if结构的条件电或循环结构的条件中
关系运算符一览
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
== | 相等于 | 8==7 | false |
!= | 不等于 | 8!=7 | true |
< | 小于 | 8<7 | false |
> | 大于 | 8>7 | true |
<= | 小于等于 | 8<=7 | false |
>= | 大于等于 | 8>=7 | true |
instanceof | 检查是否是类的对象 | "hsp" instanceof String | true |
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;//T
System.out.println("flag="+flag);
细节说明
- 关系运算符的结果都是boolean型,也就是要么是true,要么是false.
- 关系运算符组成的表达式,我们称为关系表达式。a >b
- 比较运算符"==“不能误写成"="
逻辑运算符
介绍
用于连接多个条件(多个关系表达式),最终的结果也是一个boolean值。
逻辑运算符一览
分为两组学习
-
短路与&&,短路或||,取反!
-
逻辑与&,逻辑或|,^逻辑异或
a | b | a&b | a&&b | a|b | a||b | !a | a^b |
---|---|---|---|---|---|---|---|
true | true | true | true | true | true | false | false |
true | false | false | false | true | true | false | true |
false | true | false | false | true | true | true | true |
false | false | false | false | false | false | true | false |
&&和&基本规则
名称 | 语法 | 特点 |
---|---|---|
短路与&& | 条件1&&条件2 | 两个条件都为true,结果为true |
逻辑与& | 条件1&条件2 | 两个条件都为true,结果为true |
&&和&案例演示
//&&短路与和&案例演示
int age = 50;
if(age > 20 8&& age < 90) {
System.out.println("ok100");
}
//&逻辑与使用
if(age > 20 & age < 90){
System.out.println("ok200");
}
//&逻辑与使用
if(age > 20 & age < 90){
System.out.println( "ok200");
}
//区别
int a = 4;
int b = 9;
//对于&&短路与而言,如果第一个条件为false ,后面的条件不再判断
if(a < 1 && ++b <50){
System.out.println("ok300");
}
System.out.println( "a=" +a + " b=" + b);// 4 9
//对于&逻辑与而言,如果第一个条件为false ,后面的条件仍然会判断
if(a < 1 & ++b <50){
System.out.println("ok300");
}
System.out.println( "a=" +a + " b=" + b);// 4 9
&&和&使用区别
- &&短路与:如果第一个条件为false,则第二个条件不会判断,最终结果为false,效率高
- &逻辑与:不管第一个条件是否为false,第二个条件都要判断,效率低3.开发中,我们使用的基本是短路与&&,效率高
||和|基本规则
名称 | 语法 | 特点 |
---|---|---|
短路或|| | 条件1||条件2 | 两个条件中只要有一个成立,结果为true |
逻辑或| | 条件1|条件2 | 只要有一个条件成立,结果为true |
||和|案例演示
int a = 4;int b = 9;
if( a > 1 | ++b >4){
System.out.println( "ok300");
}
System.out.print1n( "a=" + a + " b=" + b); //4 10
||和|使用区别
- ||短路或:如果第一个条件为true,则第二个条件不会判断,最终结果为true,效率高
- |逻辑或:不管第一个条件是否为true,第二个条件都要判断,效率低
- 开发中,我们基本使用||
!取反 基本规则名称
名称 | 语法 | 特点 |
---|---|---|
!非(取反) | !条件 | 如果条件本身成立,结果为false,否则为true |
!案例演示
//!操作是取反 T->F,F ->T
System.out.println(60 >20);//T
System.out.println(!(60 >20));/ /F
//a^b:叫逻辑异或,当a和b 不同时,则结果为true,否则为false
boolean b = (10 >1)^(3 > 5);
System.out.println( "b=" + b);//T
^案例演示
a^b:叫逻辑异或,当a和b 不同时,则结果为true,否则为false
^逻辑异或,System.out.printIn( (4<1)^(6> 3));//?
练习题
//1
int x = 5;
int y=5;
if(x++==6 & ++y==6){//逻辑与
x= 11;
}
System.out.println("x="+x+",y="+y);//6 6
//2
int x= 5,y= 5;
if(x++==6 && ++y==6){
x= 11;
}
System.out.println("x="+x+",y="+y);//6 5
//3
int x = 5,y = 5;
if(x++==5 | ++y==5){
x =11;
}
System.out.println("x="+x+",y="+y);//11 6
//4
int x = 5,y = 5;
if(x++==5||++y==5){
x =11;
}
System.out.println("x="+x+",y="+y);//11 5
赋值运算符
介绍
赋值运算符就是将某个运算后的值,赋给指定的变量。
赋值运算符的分类
基本赋值运算符 =
复合赋值运算符
+=, -=,*=, /=,%=等,重点讲解一个 +=,其它的使用是一个道理
a+= b;[等价a=a+b;]
a -=b;[等价a=a-b;]
案例演示
int n1 = 10;
n1 += 4;// n1 = n1 +4;
System.out.println(n1); // 14
n1 /= 3;// n1 = n1/ 3;//4
System.out. println(n1); // 4
- 赋值基本案例[int num1 = 10]
- +=的使用案例
赋值运算符特点
- 运算顺序从右往左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+=3; b++;
int n1 = 10;
n1 += 4;// n1 = n1 +4;
System.out.println(n1);// 14
n1 /= 3; // n1 = n1 / 3;//4
System. out.print1n(n1);// 4
//复合赋值运算符会进行类型转换
byte b = 3;
b += 2;//等价b = (byte)(b+2);
b++;// b = (byte)(b+1);
三元运算符
基本语法
条件表达式?表达式1:表达式2;
-
如果条件表达式为true,运算后的结果是表达式1;
-
如果条件表达式为false,运算后的结果是表达式2;
●案例演示
int a= 10;
int b = 99;
int result =a<b ? a++:b--;
System.out.println ( "result=" + result);
System.out.println("a=" + a);//11
System.out.print1n( "b=" + b);//99
使用细节
-
表达式1和表达式2需要为可以赋给接收变量的类型(或可以自动转换)
-
三元运算符可以转成if--else语句
int res = a >b ? a++:--b;
运算符优先级
- 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优先于下一行。
- 只有单目运算符、赋值运算符是从右向左运算的。
1 | 括号 | ()、[ ]、. |
---|---|---|
2 | 非、正,负号 | !、+(正)、-(负) |
3 | 自增,自减 | ++、-- |
4 | 乘,除,取余 | *、/、% |
5 | 加,减 | +、- |
6 | 移位运算 | <<、>>、>>> |
7 | 大小关系 | <、<=、>、>= |
8 | 相等关系 | ==、!= |
9 | 按位与 | & |
10 | 按位异或(在java中,这不是幂次方的符号) | ^ |
11 | 按位或 | | |
12 | 逻辑与(短路与) | && |
13 | 逻辑或(短路或) | || |
14 | 条件运算(三目运算) | ? : |
15 | 赋值运算 | =、+=、-=、*=、/=、%= |
16 | 位赋值运算 | &=、|=、^=、~=、<<=、>>=、>>>= |
标识符的命名规则和规范
标识符概念
- Java 对各种变量、方法和类等命名时使用的字符序列称为标识符
- 凡是自己可以起名字的地方都叫标识符int num1 I= 90;
标识符的命名规则(必须遵守)
- 由26个英文字母大小写,0-9,或$组成
- 数字不可以开头。int 3ab = 1;//错误
- 不可以使用关键字和保留字,但能包含关键字和保留字(l例如:aclasss)
- Java中严格区分大小写,长度无限制。int totalNum = 10; int n = 90;
- 标识符不能包含空格。int a b = 90;
判断下面变量名是否正确
hsp //T
hsp12 //T
1hsp //F
h-s //F
x h //F
h$4 //T
class //F
int //F
double //F
public //F
static //F
goto //F
stu_name //F
标识符命名规范[更加专业]
- 包名:多单词组成时所有字母都小写: aaa.bbb.ccc//比如com.hsp.crm
- 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz【大驼峰】
比如:TankShotGame - 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz【小驼峰】
比如:tankShotGame - 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
比如:定义一个所得税率TAX_RATE - 后面我们学习到类,包,接口,等时,我们的命名规范要这样遵守,更加详细的看文档。
键盘输入语句
介绍
在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。
需要一个扫描器((对象),就是 Scanner
●步骤:
- 导入该类的所在包,java.util.*
- 创建该类对象(声明变量)
- 调用里面的功能
●案例演示:
要求:可以从控制台接收用户信息,【姓名,年龄,薪水】。
import java.util.Scanner;//表示把java.util下的Scanner类导人
public class Input{
//编写一个main方法
public static void main(Stringl]args){
//演示接受用户的输入//步骤
//Scanner类表示简单文本扫描器,在java.util包
//1.引入/导入Scanner类所在的包
//2.创建Scanner 对象, new创建一个对象,体会
//myScanner就是Scanner类的对象
Scanner myScanner = new Scanner(System.in);
//3.接收用户输入了,使用相关的方法
System.out.print1n("请输入名字");
//当程序执行到 next方法时,会等待用户输入~~~
String name = myScanner.next();//接收用户输入字符串System.out.println("请输入年龄");
int age = myScanner.nextInt();//接收用户输入intSystem.out.println("请输入薪水");
double sal = myScanner.nextDouble();//接收用户输入doubleSystem.out.println("人的信息如下:");
System.out.println("名字"+name+“年龄=”+age +“薪水=” +sal);
}
}
进制
进制介绍
对于整数,有四种表示方式:
- 二进制:0,1,满2进1.以Ob或0B开头。
- 十进制:0-9,满10进1。
- 八进制:0-7,满8进1。以数字0开头表示。
- 十六进制:0-9及A(10)-F(15),满16进1.以0x或0X开头表示。此处的A-F不区分大小写。
举例说明
int n1 = 0b1010;
int n2 =1010;
int n3 = 01010;
int n4 = 0x10101;
System.out.println("n1=" + n1);
System.out.println("n2=" + n2);
System.out.print1n("n3=" + n3);
System.out.println("n4=" + n4);
进制的转换(基本功)
进制转换的介绍
第一组:
-
二进制转十进制
0b1011=1*20+1*21+0*22+1*23=11
-
八进制转十进制
0234=4*80+3*81+2*82=4+24+128=156
-
十六进制转十进制
0x23A=10*160+3*161+2*162=10+48+512=570
第二组:
-
十进制转二进制
34/2=17...............0
17/2=8.................1
8/2=4....................0
4/2=2....................0
2/2=1....................00b100010
-
十进制转八进制
131/8=16..............3
16/8=2...................00203
-
十进制转十六进制
237/16=14...............13------->D
14-------->E0XED
第三组
-
二进制转八进制
0b11010101=>11(3) 010(2) 101(5)=>0325
-
二进制转十六进制
0b11010101=>1101(D) 0101(5)=0xD5
第四组
-
八进制转二进制
0x0237=2(010)3(011)7(111)=0b10011111
-
十六进制转二进制
0x23B=2(0010)3(0011)B(1011)=0B1000111011
二进制在运算中的说明
-
二进制是逢2进位的进位制,0、1是基本算符。
-
现代的电子计算机技术全部采用的是二进制,因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示的。 二进制(Binary) 数用0和1两个数字及其组合来表示任何数。进位规则是"逢2进1",数字1在不同的位上代表不同的值,按从右至左的次序,这个值以二倍递增。
原码、反码、补码(重点难点)
网上对原码,反码,补码的解释过于复杂,我这里精简几句话:对于有符号的而言:
-
二进制的最高位是符号位:0表示正数, 1表示负数(口诀: 0->0 1-> -)
-
正数的原码,反码,补码都一样(三码合一)
-
负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)
-
负数的补码=它的反码+1,负数的反码=负数的补码-1
-
0的反码,补码都是0
-
java没有无符号数,换言之, java中的数都是有符号的
-
在计算机运算的时候,都是以补码的方式来运算的.
-
当我们看运算结果的时候,要看他的原码
位运算
java中有7个位运算(&、|、^、~、>>.<<和>>>)
√分别是按位与&、按位或|、按位异或^,按位取反~,它们的运算规则是:
按位与&:两位全为1,结果为1,否则为0
按位或|:两位有一个为1,结果为1,否则为0
按位异或^:两位一个为0,一个为1,结果为1,否则为0
按位取反~:0->1,1->0 (在代码中~是对补码进行操作)
比如: 2&3=? ~-2 =? ~2=? 2|3=? 2^3=?
√完成前面的案例!
●还有3个位运算符>>、<<和>>>,运算规则:
- 算术右移>>:低位溢出,符号位不变,并用符号位补溢出的高位
- 算术左移<<;符号位不变,低位补0
- >>>逻辑右移也叫无符号右移,运算规则是:低位溢出,高位补0
- 特别说明:没有<<<符号
●应用案例
int a=1>>2;//1=>000000|01=>本质1/2/2=0
int c=1<<2;//1=>0000001|00=>本质1*2*2=4
●完成前面的案例
建议:讲解的即可,不用再深入。
本章习题
-
计算下列表达式的结果
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
//注意:有小数运算,得到结果是近似值 -
试说出下面代码的结果
int i=66;
System.out.println(++i+i);//执行i=i+1=>i=67 =>134 -
在Java中,以下赋值语句正确的是(C D)。
A) int num1=(int)"18"; //错误应该Integer.parselnt("18");
B) int num2=18.0; //错误double,-> int
C) double num3=3d; //ok
D)double num4=8; //ok int -> double
E) int i=48; char ch = i+1; //错误int ->char
F) byte b = 19; short s = b+2; //错误int ->short
4.试写出将String转换成double类型的语句,以及将char类型转换成String的语句,举例说明即可,写简单代码
String str = "18.8";1/注意字符串要可以被转成double
double d1 = Double.parseDouble(str);
char c1 ='韩";
String str2 = c1+ "";