Java学习-第三天
今日学习共6节课
学习笔记梳理:
第二章:变量与运算符
06.计算机底层如何存储数据
001)进制分类
代码:
int z1 = 123; //十进制,前面有0,一般不需要写
int z2 = 0b101; //二进制,前面要加0b
int z3 = 0127; //八进制,前面要加0
int z4 = 0x12aF; //十六进制,前面要加0x,16进制分别为123456789abcdef
System.out.println(z1);
System.out.println(z2);
System.out.println(z3);
System.out.println(z4);
输出为:
123
5
87
15
//默认转换为10进制
002)进制转换
转换示例:
十进制-二进制-八进制-十六进制
0-0-0-0
1-1-1-1
2-10-2-2
3-11-3-3
4-100-4-4
5-101-5-5
6-110-6-6
7-111-7-7
8-1000-10-8
9-1001-11-9
10-1010-12-a 或 A
11-1011-13-b 或 B
12-1100-14-c 或 C
13-1101-15-d 或 D
14-1110-16-e 或 E
15-1111-17-f 或 F
16-10000-20-10
二进制的应用:
其中国际求助的sos密码为
SOS
...---...
003)进制转换计算
额,我不想写,应该没人这么无聊去计算进制转换吧,我反正用计算器计算了滑稽[滑稽]
07.运算符(掌握)
001)算数运算符
算术运算符(7 个) +、-、*、/、%、++、--
赋值运算符(12 个) =、+=、-=、*=、/=、%=、>>=、<<=、>>>=、&=、|=、^=等
比较(或关系)运算符(6 个)>、>=、<、<=、==、!=
逻辑运算符(6 个) &、|、^、!、&&、||
位运算符(7 个) &、|、^、~、<<、>>、>>>(之后在学)
条件运算符(1 个) (条件表达式)?结果 1:结果 2
Lambda 运算符(1个)->(第 18 章时讲解)
按照操作数个数分为:
一元运算符(单目运算符)、二元运算符(双目运算符)、三元运算符 (三目运算符)
一元运算符(单目运算符) 正号(+)、负号(-)、++、--、!、~
二元运算符(双目运算符) 除了一元和三元运算符剩下的都是二元运算符
三元运算符 (三目运算符) (条件表达式)?结果 1:结果 2
002)加'+',减'-',乘'*',除'/',取模(取余)'%'
代码:
int a = 3;
int b = 4;
System.out.println(a + b);// 7
System.out.println(a - b);// -1
System.out.println(a * b);// 12
System.out.println(a / b);// 计算机结果是 0,为什么不是 0.75 呢?
System.out.println(a % b);// 3
//结果与被模数符号相同
System.out.println(5 % 2);//1
System.out.println(5 % - 2);//1
System.out.println(-5 % 2);//-1
System.out.println(-5 % - 2);//-1
//商*除数 + 余数 = 被除数
//5%-2 ==>商是-2,余数时 1 (-2)*(-2)+1 = 5
//-5%2 ==>商是-2,余数是-1 (-2)*2+(-1) = -4-1=-5
输出为:
7
-1
12
0
3
1
1
-1
-1
003)“+”号的两种用法
*第一种:对于+两边都是数值的话,+就是加法的意思
//加法
int z1 = 500;
int z2 = 20;
long z3 = 1000;
long z4 = 314;
System.out.println(z1 + z2);
System.out.println(z3 + z4);
*第二种:对于+两边至少有一边是字符串的话,+就是拼接的意思
// 字符串类型的变量基本使用
// 数据类型 变量名称 = 数据值;
String str1 = "Hello";
System.out.println(str1); // Hello
System.out.println("Hello" + "World"); // HelloWorld
String str2 = "Java";
// String + int --> String
System.out.println(str2 + 520); // Java520
// String + int + int
// String + int
// String
System.out.println(str2 + 5 + 20); // Java520
004)自加自减运算
理解:++ 运算,表示自增 1。同理,-- 运算,表示自减 1,用法与++ 一致
1、单独使用
*变量在单独运算的时候,变量前++和变量后++,是没有区别的。
*变量前++ :例如 ++a
*变量后++ :例如 a++
// 定义一个 int 类型的变量 z
int z = 3;
//++a;
z++;
// 无论是变量前++还是变量后++,结果都是 4
System.out.println(z);
//同理
int h = 6;
++h;
System.out.println(h);
输出为:4,7
2、复合使用
• 和其他变量放在一起使用或者和输出语句放在一起使用,前++和后++就产生了不同
• 变量前++ :变量先自增 1,然后再运算
• 变量后++ :变量先运算,然后再自增 1
// 其他变量放在一起使用
int x = 3;
//int y = ++x; // y 的值是 4,x 的值是 4,
int y = x++; // y 的值是 3,x 的值是 4
System.out.println(x);
System.out.println(y);
// 和输出语句一起
int z = 5;
//System.out.println(++z);// 输出结果是 6,z 的值也是 6
System.out.println(z++);// 输出结果是 5,z 的值是 6
System.out.println(z);
输出为:
4
3
5
6
例二:
int z1 = 10;
int z2 = ++z1;//z1赋值为11
System.out.println("z1 = " + z1 + "z2 = " + z2);//输出为11和11
int z3 = 10;
int z4 = z3++;//z3赋值为11
System.out.println("z3 = " + z3 + "z4 = " + z4);//输出为11和10
输出为:
11,11
11,10
案例 1:
随意给出一个整数,打印显示它的个位数,十位数,百位数的值。
格式如下:
数字 xxx 的情况如下:
个位数:
十位数:
百位数:
例如:
数字 153 的情况如下:
个位数:3
十位数:5
百位数:1
int num = 187;
int bai = num / 100;//187除100等于1
int shi = num % 100 / 10;//187余87除10舍去7等于8
int ge = num % 10;//187取余180余7
System.out.println("百位为:" + bai);
System.out.println("十位为:" + shi);
System.out.println("个位为:" + ge);
输出为:
百位为:1
十位为:8
个位为:7
拓展:获取一个四位数的个位,十位,百位,千位
//1.定义一个变量,赋值为一个四位数整数,例如 1234
int num = 1234;
//2.通过运算操作求出个位,十位,百位,千位
int ge = num % 10;//余10得123余4
int shi = num /10 % 10;//除10得123.4,123余10得12余3
int bai = num /100 % 10;//除100得12余34,余10得1余2
int qian = num / 1000 % 10;//除1000得1余2,余10得1
System.out.println("个位上的数字是:" + ge);
System.out.println("十位上的数字是:" + shi);
System.out.println("百位上的数字是:" + bai);
System.out.println("千位上的数字是:" + qian);
输出为:
个位上的数字是:4
十位上的数字是:3
百位上的数字是:2
千位上的数字是:1
案例 2:为抵抗洪水,战士连续作战 89 小时,编程计算共多少天零多少小时
int z1 = 89;
int z2 = z1 / 24;
int z3 = z1 % 24;
System.out.println("共" + z2 + "天");
System.out.println("多" + z3 + "小时");
输出为:
共3天
多17小时
练习 1:算术运算符:自加、自减
System.out.print("i="+i); //10
System.out.println("i1="+i1);//11
i = ++i1;
System.out.print("i="+i);//12
System.out.println("i1="+i1);//12
i = i2--;
System.out.print("i="+i);//20
System.out.println("i2="+i2);//19
i = --i2;
System.out.print("i="+i);//18
System.out.println("i2="+i2);//18
练习 2:
System.out.println("5+5=" + 5 + 5); //打印结果是? 5+5=55 ?
输出为:5+5=55
因为前面"5+5=" +是连接,后面5 + 5也就是连接所以等于55
练习 3:
byte bb1 = 127;
bb1++;
System.out.println("bb1 = " + bb1);
输出为:-128
练习 4:
int i = 1;
int j = i++ + ++i * i++;
System.out.println("j = " + j);
输出为:10
练习 5:(企业真题)写出下列程序的输出结果
int i = 2;
int j = i++;
System.out.println(j);
int m = 2;
m = m++; //(1)先取 b 的值“2”放操作数栈 (2)m 再自增,m=3 (3)再把操作数栈中的
"2"赋值给 m,m=2
System.out.println(m);
输出为:2,2
005)赋值运算符
符号:=
当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理
支持连续赋值
扩展赋值运算符: +=、 -=、*=、 /=、%=
赋值运算符符号解释
+= 将符号左边的值和右边的值进行相加操作,最后将结果赋值给左边的变量
-= 将符号左边的值和右边的值进行相减操作,最后将结果赋值给左边的变量
*= 将符号左边的值和右边的值进行相乘操作,最后将结果赋值给左边的变量
/= 将符号左边的值和右边的值进行相除操作,最后将结果赋值给左边的变量
%= 将符号左边的值和右边的值进行取余操作,最后将结果赋值给左边的变量
示例代码:
int i1 = 10;
long l1 = i1; //自动类型转换
byte bb1 = (byte)i1; //强制类型转换
int i2 = i1;
//连续赋值的测试
//以前的写法
int a1 = 10;
int b1 = 10;
//连续赋值的写法
int a2,b2;
a2 = b2 = 10;
int a3 = 10,b3 = 20;
//举例说明+= -= *= /= %=
int m1 = 10;
m1 += 5; //类似于 m1 = m1 + 5 的操作,但不等同于。
System.out.println(m1);//15
//练习 1:开发中,如何实现一个变量+2 的操作呢?
// += 的操作不会改变变量本身的数据类型。其他拓展的运算符也如此。
//写法 1:推荐
short s1 = 10;
s1 += 2; //编译通过,因为在得到 int 类型的结果后,JVM 自动完成一步强制类型转换,将 int 类型强转成 short
System.out.println(s1);//12
//写法 2:
short s2 = 10;
//s2 = s2 + 2;//编译报错,因为将 int 类型的结果赋值给 short 类型的变量 s 时,可能损失精度
s2 = (short)(s2 + 2);
System.out.println(s2);
//练习 2:开发中,如何实现一个变量+1 的操作呢?
//写法 1:推荐
int num1 = 10;
num1++;
System.out.println(num1);
//写法 2:
int num2 = 10;
num2 += 1;
System.out.println(num2);
//写法 3:
int num3 = 10;
num3 = num3 + 1;
System.out.println(num3);
输出为:
15
12
12
11
11
11
练习:
//练习 1:
short s = 3;
s =s+2; //① 编译报错
s += 2; //② 正常执行
//练习 2:
int i = 1;
i *= 0.1;
System.out.println(i);//0
i++;
System.out.println(i);//1
//练习 3:
//前++是先自加再使用而后++是先使用再自加!
int m = 2;
int n = 3;
n *= m++; //n = n * m++;
//因为上面m++已经待人n变量使用过了,所以下面m = 3
System.out.println("m=" + m);//3
//n = 2 * n * m++(2) 3所以2 *3 = 6
System.out.println("n=" + n);//6
//练习 4:
int n = 10;
n += (n++) + (++n); //n = n + (n++) + (++n)
//n = 10,n++ = 10,n++ = 11,10 + 10 + 11 =31,其中n++因为后++是先使用再自加所以,下面是32
System.out.println(n);//32
//练习 5:你有几种办法实现变量值减 1?变量值减 2 呢?
//练习①:变量值减 1
short s = 10;
//方式 1:
//s = (short)(s - 1);
//方式 2:推荐
s--; //或者 --s
//方式 3:
s -= 1;
//练习②:变量值减 2
short s1 = 10;
//方式 1:
//s1 = (short)(s1 - 2);
//方式 2:推荐
s1 -= 2;
006)比较运算符
比较运算符的结果都是 boolean 型,也就是要么是 true,要么是 false。
< >= <= :只适用于基本数据类型(除 boolean 类型之外)
== != :适用于基本数据类型和引用数据类型
比较运算符“==”不能误写成“=”
示例代码:
int i1 = 10;
int i2 = 20;
System.out.println(i1 == i2);//不相等false
System.out.println(i1 != i2);//!=是不相等的意思,所以输出true
System.out.println(i1 >= i2);//>=的意思是大于等于,所以false
int m = 10;
int n = 20;
System.out.println(m == n);//不相等false
System.out.println(m = n);//m赋值n变成20
boolean b1 = false;
boolean b2 = true;
System.out.println(b1 == b2);//不相等false
System.out.println(b1 = b2);//b1赋值为b2true
思考:
boolean b1 = false;
//区分好==和=的区别。
if(b1 == true) //if(b1 = true)
System.out.println("结果为真");
else
System.out.println("结果为假");
//额,if还没学,但可以看懂
//输出结果为假
今日学习到此为止