JAVA学习笔记(9){运算符}{隐式转换和强制转换}

学习到的运算符的使用和提取一个数个位十位百位的方法

运算符:对字面量或者变量进行操作的符号

符号作用
+
-
*
/
%取模、取余 

+-运算符的使用:

public class Main {
    public static void main(String[] args) {
        System.out.println(3+2);
        System.out.println(5-1);
        System.out.println(7*9);
        System.out.println(1.1+1.01);
        System.out.println(1.1-1.01);
        System.out.println(1.1*1.01);
    }
}

 在加减乘运算中,如果有小数参与,计算结果可能不精确

*%运算符的使用:

public class yansuanfu//主入口
{
    public static void main(String[] args)
    {
        System.out.println(10/2);//除法
        System.out.println(10/3);//只有整数参与计算,结果只会等于整数
        System.out.println(10.0/3);//小数参与计算结果有可能不精确
        System.out.println(10%2);//取余
        System.out.println(10%3);
    }
}

练习:键盘录入一个三位数,将其拆分为个位,十位,百位后,打印在控制台,例如输入123.将它的个位十位百位输出

public class yunsuanfu
{
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个三位数");
        int num=sc.nextInt();
        int ge=num%10;
        int shi=num/10%10;
        int bai=num/100%10;
        System.out.println(ge);
        System.out.println(shi);
        System.out.println(bai);
    }
}

由此可以看出要取某一个数的某一位应当为:

这个数字取余10,就为这个数字的个位

这个数字除以10再取余10,就为这个数字的十位

这个数字除以100再取余10,就为这个数字的百位

以此类推,千位,万位也是除数对应变大

个位num%10
十位num/10%10
百位num/100%10
…………

接着就会想到一个问题,例如:

public class yunsuanfu
{
    public static void main(String[] args)
    {
        int a=10;
        double b=12.3;
        c=a+b;//仅代表意思
    }
}

这里的变量c会是什么类型呢?

public class yunsuanfu
{
    public static void main(String[] args)
    {
        int a=10;
        double b=20.0;
        c=a+b;//仅代表意思
    }
}

这里的变量c又是什么类型呢?

首先我们要了解到,当数字进行运算时,数据类型不一样不能运算,需要转成一样的,才能运算

类型转换的分类:

取值范围提示:byte<short<int<long<float<double

隐式转换:取值范围小的数值转换为取值范围大的数值

int a=10;
double b=a;

这里的变量a会自动转换为10.0,因为double范围比int大,所以变量a赋值给变量b时,相当于小的箱子装进大箱子里

隐式转换的两种提升规则:

取值范围小的,和取值范围大的进行计算,小的会先提升为大的,再进行运算

byte short char三种类型的数据在运算的时候,都会直接先提升为int,然后再进行运算

public class yunsuanfu
{
    public static void main(String[] args)
    {
        int a=10;
        double b=20.0;
        c=a+b;
    }
}

所以这里的变量a会把自己提升为double类型再进行计算,所以最后a+b的时候会是两个double类型进行计算,c自然而然也就是double类型了 

public class yunsuanfu
{
    public static void main(String[] args)
    {
        byte a=10;
        byte b=20;
        c=a+b;//仅表达意思
    }
}

 根据第二种提升规则,byte short char这三种类型的数据在进行运算的时候,都先会提升为int,所以最终的变量c应该为int类型

练习:

byte b1=10;
byte b2=20;
result=b1+b2;

result是什么数据类型? 

 这里根据第二种提升规则,result为int类型

int i=10;
long n=100L;
double d=20.0;
result=i+n+d;

 result是什么数据类型?

从左到右计算,先计算i+n,再根据第一种提升规则,所以i+n的结果为long类型,再计算long类型的i+n和double类型的d,再次根据第一种提升规则,将long类型的i+n提升为double类型,所以最终的result数据类型为double

byte b=10;
short s=20;
long =100L;
result=b+s+n;

 result是什么数据类型?

先根据第二种提升规则,变量b+变量s会转换为int类型,接着int类型的b+s加上long类型的n

根据第一种提升规则,int类型的b+s会提升为long类型参与运算,所以最后的reult为long类型

强制转换:取值范围大的数值转换为取值范围小的数值

强制转换格式:目标数据类型 变量名=(目标数据类型)被强转的数据

double a=12.3;
int b=(int)a;

注意:强制转换会可能导致数据错误

例如:

int a=300;
byte b=(byte)a;

练习:

byte b1=10;
byte b2=20;
byte result=b1+b2;

如何利用强制转化修改第三段代码?

byte result=(byte)(b1+b2);

但是如果将b1和b2的值改为100,算出的结果将会错误,因为数值过大

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我是世界大好人

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值