Day03-【Java SE基础】类型转换&运算符&程序结构

一、类型转换

1. 二进制十进制互转

计算机以二进制存储数据。十进制转二进制,使用除二取余法并倒置取数。如35
在这里插入图片描述

现在来验证一下是否准确,此时将10011转为十进制数采用多项式求和,从低到高,二进制每一位分别代表了 2 n − 1 2^{n-1} 2n1其中n为从低到高的位数,10011中的倒数第一个1代表2的0次方,依次类推可得,验证
1 × 2 0 + 1 × 2 1 + 0 × 2 2 + 0 × 2 3 + 0 × 2 4 + 1 × 2 5 = 35 1\times 2^0+1\times 2^1+0\times 2^2+0\times 2^3+0\times 2^4+1\times 2^5=35 1×20+1×21+0×22+0×23+0×24+1×25=35

2. JAVA中的不同进制编程格式

Java程序中支持书写二进制、八进制、十六进制的数据,分别需要以0B或者0b、0、0X或者0x开头。

int i1 = 0B01100001;
System.out.println(i1);//97
int i2= 0141;
System.out.println(i2);//97
int i3 = 0x61;
System.out.println(i3);//97

3. 自动类型转换隐式转换

1、存在某种类型的变量赋值给另一种类型的变量

  • 类型范围小的变量,可以直接赋值给类型范围大的变量。byte类型的变量或常量可以赋值给int类型
byte a = 12//1B=8位
int b=a;//4B=32位 8位直接拖入最后一个字节,符号位0即整数前面全部补0
System.out.println(b);//12

自动类型转换的食物链,单向箭头
在这里插入图片描述

int c= 100://4
double d=c:/ 8 发生了自动类型转换了Systen.aut.printin(d):
char ch="a";//ASCII码表,char是数值型类型,97=> 00000000 01100001
int i=ch;/ 发生自动类型转换=> 00000000 00000000 00000000 01100001

3. 表达式的自动类型转换

1、存在不同类型的变量或数据一起运算

  • 在表达式中,小范围类型的变量,会自动转换成表达式中较大范围的类型,再参与运算
    • 表达式的最终结果类型由表达式中的最高类型决定
    • 在表达式中,byte、short、char 是直接转换成int类型参与运算的
byte a = 10;
int b = 20;
long c = 30;
long rs=a+b+C;
Systen.out.println(rs);

double rs2=a + b+1.0;
Systen.out.println(rs2);

byte 1 = 10;
short j = 30;
int rs3 = i + j;
systen.out.println(rs3);

//笔试题:
byte b1 = 10:
byte b2 = 80;
byte b3 = b1 + b2;//报错,因为计算机怕在运算过程中超过值域,byte、short、char 是直接转换成int类型参与运算的,

4. 强制类型转换

大范围类型的变量-> 小范围类型的变量,java不会自动转换,类型范围大的数据或者变量,直接赋值给类型范围小的变量,会报错。

  • 强制类型转换:强行将类型范围大的变量、数据赋值给类型范围小的变量。
    • 数据类型 变量2=(数据类型)变量1、数据
    • 强制类型转换可能造成数据(丢失)溢出,不推荐,丢失精度了!
    • 浮点型强转成整型,直接丢掉小数部分,保留整数部分返回
    • 定义变量整数用int,小数用double推荐!
int a = 20;//32位
byte b=(byte)a;//ALT + ENTER 强剧类型转换 截至32位的后8位给它
System.out.println(a);
System.out.println(b);//没超出范围,正常输出20

int i = 1500;//00000000 00000000 00000101 11011100
byte j =(byte)i;// 11011100 首位是符号位,表示负数,-36
System.out.printn(j); //-36

二、运算符

运算符:对变量、字面量进行运算的符号
表达式:用运算符连接起来符合Java语法的式子

1. 算术运算符

在这里插入图片描述
其中除法,整数与整数运算只能得到为整数的商,没有小数部分,除非使用浮点数运算,如10.0/2

//数据拆分 标准公式num/10^(n-1)%10,如个位,num/10^0%10,十位百位以此类推
int num=456;
//数值拆分
int ge=num%10;// 456%10=45..6,取6
int shi=num/10%10;// 456/10=45%10=4...5
int bai=num/100%10 // 456/100%10=4%10=4

加号:

  • 数字相加(符合表达式自动转换)
  • 字符相加(表达式自动转换)
    • 单独打印展示的字符本身
    • 参与运算展示的是数值类
  • 字符串相加
    • 字符串相加直接拼接
    • 字符串数值运算直接拼接

2. 赋值运算符

int a=10;

short s=1;
s+=2;//此行包含强制类型转换,等价于s=(short)(s+2)

扩展的赋值运算符隐含了强制类型转换

//常量优化机制:在编译时,如果常量在左边类型的范围内,编译通过,反之编译失败(报错)
byte b=1;//int->byte 大->小 属性强转
byte b2=128;//error
b=(short)b+1;//整体结果为int,需要强转

3.自增自减运算符

只能操作变量,不能操作字面量
在这里插入图片描述
在这里插入图片描述

int i=10;
int rs=++i;//先加1=11赋值给rs
int rs2=i++;//先赋值rs2 10,再i=11

如果单独使用放前放后是没有区别的。
非单独使用:在变量前,先进行变量自增/自减,再使用变量。
非单独使用:在变量后,先使用变量,再进行变量自增/自减。

4.关系运算符

![!](https://img-blog.csdnimg.cn/direct/6abc71d4d21e4c4a8bb885da796ab806.png)
判断数据是否满足条件,最终会返回一个判断的结果,这个结果是布尔类型的值:true或者false。
注意:在java中判断是否相等一定是“==”千万不要把误写成

5.逻辑运算符

在这里插入图片描述

6.三元运算符

  • 格式: 条件表达式?值1:值2;
  • 执行流程: 首先计算关系表达式的值,如果值为true,返回值1,如果为false,返回值2。
double score = 58.5;
stringrs=score>=60?"及格":"不及格";
System.out.println(rs);
//二数比大小
int a = 99;
int b = 69;
int mex =a> b?a : b;
System.out.println(max);
//三数求最大
int i = 10;
int j= 45;
int k = 34;
int temp =i>j?i:j;//比较ij得出较大
int max2 =temp > k? temp : k;//比较剩余的和较大得出最大
System.out.println(max2);

7.运算符优先级

在这里插入图片描述

8. 案例知识:在程序中接收用户通过键盘输入的数据

在这里插入图片描述
在这里插入图片描述

Scanner sc  new scanner(Systen.in);
System.out.println("请款输入斯的年龄:);
sc.nextInt()://会开始等持用户输入一个整数,直到用户按了enter键,才会拿到

new一个对象,只需new 对象类.var,按下回车,new Scanner(System.in).var回车自动生成对象名和定义类型的。

三、程序结构

1. Debug概述

Debug:是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。使用断点调试,断点是个标记,表示从哪里开始看。控制程序一步一步执行,查看每一步变量的变化。
①如何加断点:选择要设置断点的代码行,在行号的区域后面单击鼠标左键即可
②如何运行加了断点的程序:在代码区域右键Debug执行
③看哪里:看Debugger窗口,其中Frame窗口表示程序运行到哪个方法,variables表示变量,看Console窗口
④点哪里:点(Step Over F8 不进方法)开始,点(Stop)结束,step into进方法
⑤如何删除断点:选择要删除的断点,单击鼠标左键即可

  • view breakpoints:查看断点,选择点击done,批量取消

2. 顺序结构

  • 顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行

3. 分支结构

3.1 if语句

根据判定的结果(真或假)决定执行某个分支的代码,但凡有一个满足其他的条件就不会判断了
- 是

在这里插入图片描述
1.判断关系表达式的结果
2.如果结果成立,执行语句体,继续执行其他语句
3.如果不成立,绕过if,继续执行其他语句
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果接收到了错误数据,提供else语句,提升程序的鲁棒性。

3.2 switch分支

是通过比较值来决定执行哪条分支。
比较case值,与哪里一样就执行哪个语句块,遇到break退出,没有break或者没有case值用default的语句块。
if可以做区间匹配,switch只能做值匹配,值匹配时直接使用switch,格式好看,性能较好,代码优雅
在这里插入图片描述
浮点数运算在java中运算不精确,所以不支持,long数字太大,不可能有那么多分支。
在这里插入图片描述
可以使用穿透特性简化代码降低冗余的,jdk14以上支持多个case,case 1,2,3

4. 循环结构

控制一段代码重复执行多次,减少代码的重复编写、灵活的控制程序的执行。

4.1 for循环

在这里插入图片描述

4.2 while循环

在这里插入图片描述

4.3 while和for有什么区别?什么时候用for,什么时候用while?

功能上是完全一样的,for能解决的while也能解决,反之亦然。
使用规范:知道循环几次:使用for
不知道循环几次建议使用:while。
其实while能做的for都能实现,for能做的while也都能实现,功能上无区别。
使用规范:如果一开始不知道循环次数的情况下,建议使用while循环解决更专业。一开始就知道循环几次的情况下,使用for循环来解决更专业。

4.4 do while循环

在这里插入图片描述
例如抢票系统,直接打开直接抢,不判断,抢不到再判断是否再抢。

4.5 三者区别
  • for循环 和 while循环(先判断后执行);do…while(先执行后判断)
  • for循环和while循环的执行流程是一模一样的,功能上无区别,for能做的while也能做,反之亦然。
  • 使用规范:如果已知循环次数建议使用for循环,如果不清楚要循环多少次建议使用while循环。
  • 其他区别:for循环中,控制循环的变量只在循环中使用。while循环中,控制循环的变量在循环后还可以继续使用。
4.6 死循环

应用场景:服务器程序
在这里插入图片描述

4.7 循环嵌套

在这里插入图片描述

4.8 跳转关键字

break :跳出并结束当前所在循环的执行。
continue:用于跳出当前循环的当次执行,直接进入循环的下一次执行。

break :只能用于结束所在循环,或者结束所在switch分支的执行。
continue :只能在循环中进行使用。

5. 随机数案例

ctrl+alt+t:可以将选择的语句被包含各种结构语句中
在这里插入图片描述

  • 50
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jingwei1205

宝贝儿 施舍施舍吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值