学习到的运算符的使用和提取一个数个位十位百位的方法
运算符:对字面量或者变量进行操作的符号
符号 | 作用 |
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取模、取余 |
+-运算符的使用:
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,算出的结果将会错误,因为数值过大