数学运算
同种类型数据参与运算得到的同种结果
- 如果数据类型不同,则转换为同种类型计算
- 返回结果类型与原数据类型一致
如果是byte、short、char按照int计算
+ - * / 四则运算
案例:
int a1 = 5;
int a2 = 6;
int c = a1*a2;//计算乘法
a1 = 6;
long l1 = 7 ;
//int 与 long进行计算自动将int转换为long类型,在与long类型进行计算,返回long类型的结果。
long x = a1 * l1;
int a = 5;
int b = 2;
// 整数的除法是整除的结果
int c = a/b;
double d1 = 5.0;
double d2 = 2;
//浮点数的除法是浮点结果!!
double d3 = d1/d2;
经典面试题目:
如下代码:
double price = 80/100*5.6;
System.out.println(price);
选择输出结果:
A.编译错误 B.运行异常 C.0.0 D.4.48
答案:C
说明:80/100 是整除计算返回结果为 0
% 取余数运算:
计算结果是除法运算的余数
如:
int a = 11;
int b = 3;
int c = a % b; // 11/3 = 3 余 2
// c 的值是余数 2
取余数运算的特点:
假设:整数m n, x = m%n
则:
1.x的值范围: [0,n)
2.如果m = 0 1 2 ...
则 x=0, 1 ... n-1, 0, 1 ... n-1 ...
是周期性结果
取余数运算的用途:
- 处理周期性变化算法
- 用于时间计算
案例:
/*
* 举个例子
* 计算 238秒是 ?分?秒
*/
int s = 238; //秒数
int m = s/60;//整分
int sec = s % 60;//不够一分钟整秒
System.out.println(m+"分"+sec+"秒");
/*
* 显示当前系统时间的秒数
*
*/
long ms = System.currentTimeMillis();
long ss = ms/1000;
long mm = ss%60;//不够一分钟的秒数
System.out.println(mm);
比较运算
- 运算符: > < >= <= == !=
- 运算结果是boolean类型
比较运算案例:
int age = 12;
int maxAge = 16;
//检查一个人是否是小孩
boolean isKid = age <= maxAge;
System.out.println(isKid);//true
//检查一个人是否是成人
boolean isMan = age>=18;
System.out.println(isMan);
//如下代码在毫秒数为奇数时候输出true
long ms = System.currentTimeMillis();
boolean b = ms%2==1;
System.out.println(ms);
System.out.println(b);
逻辑运算
- 运算符 &&与 ||或 !非
- 布尔类型参与运算,返回boolean类型结果
- 运算规则:
- && 两个条件都成立(true)返回true
- || 两个条件有一个是成立(true)返回true
- ! 相反的计算,true变false,false变true
逻辑运算应用
- 判断一个字符是否为英文大写字符
- 检查一个人的年龄是否为儿童,如果是就输出儿童节快乐。
1. 判断一个字符是否为英文大写字符
思路: 字符本质是一个数字(字符的编码), 根据这个编码判断大小即可
代码:
char c = 'B';//66
// A B C Z
// 65 66 67 .... 65+25 90
// 如果c的编码介于 65 ~ 90 之间则是
// 大写英文: 65 <= c && c <= 90
//boolean isChar = 65<=c && c<=90;
boolean isChar = 'A'<=c && c<='Z';
// 65<=66 && 66<=90
// true && true
System.out.println(isChar);//true
2. 检查一个人的年龄是否为儿童,如果是就输出儿童节快乐。
案例:
Scanner in = new Scanner(System.in);
System.out.print("输入你的年龄:");
int age = in.nextInt();
//检查年龄是否为儿童
boolean isChilden = age <= 16;
//如果age小于等于16 则isChilden是true
System.out.println(isChilden);
// if 如果, 分支流程控制语句
// if(判断条件) 判断条件是true就执行
// {}里面的代码,false就不执行了
if(isChilden){//合理定义变量提高可读性
System.out.println("节日快乐");
}
短路逻辑运算
生活中常见的逻辑判断都是短路逻辑,Java的逻辑运算也是短路逻辑判断。
短路运算原理:
案例:
/*
* 测试短路现象
*/
int i = 100;
int j = 200;
// (表达式1)&&(表达式2) 短路运算规则:
// 第一个(表达式1)为false的情况下,直接
// 得到整体计算结果 false, (表达式2)不
// 再计算了。相反(表达式1)为true时候
// (表达式2) 还是要计算的!
//如何测试短路
//false && (XXX)
boolean b1 = (i>j)&&(++i > 9);
System.out.println(b1);//false
System.out.println(i);//100 发生短路
//经典题目:选择执行结果
//A.编译错误 B.运行异常 C.100 D.101
//测试 || 运算的短路现象
// (表达式1)||(表达式2) 短路规则:
// (表达式1)的运算结果为true的时候,
// (表达式2)不计算,直接得到结果true
// 反之(表达式1)计算结果为false的时候
// (表达式2) 还需要计算。
//编写案例:
// true || (表达式2)
boolean b2 = (j>2)||(j++ > 9);
System.out.println(b2);
//200说明:发生短路 (表达式2)没有执行
System.out.println(j);//200
赋值运算 =
类似于数学赋值运算,但是不同的是赋值表达式是有值的,并且赋值表达式的值是最后赋值的结果。
案例:
/*
* 赋值运算演示
*/
int num = 18, index;
System.out.println(index = num%5);
int a, b, c, d;
// 100
a = b = c = (d = 100)+5;
System.out.println(a);
符合赋值运算
为了简便实现变量自我增加(减少)等运算,Java提供了符合赋值运算
运算符有: += -= *= /= %= …
其运算规则为:
假设 int x = 10;
x += 5 等价于 x = (int)(x+5);
x -= 5 等价于 x = (int)(x-5);
x *= 5 等价于 x = (int)(x*5);
x /= 5 等价于 x = (int)(x/5);
x %= 5 等价于 x = (int)(x%5);
注意:
- 如上运算是包含强制转换过程的!
- 如上运算中除法也会发生整除!
案例:
/*
* 符合赋值运算
* 扩展赋值运算
*/
int x = 10;
x+=5;//在x的值上增加5
//基本等价于 x = x+5;
//x = x+5;
System.out.println(x);//15
x = 10;
x += 5.6;//完全等价于 x=(int)(x+5.6);
System.out.println(x); //15
byte n = 4;
//n = n+4;
n+=4;// n = (byte)(n+4);
System.out.println(n);
double dx = 5.6;
dx*=120.0/100;
// dx = (double)(dx*(120/100))
// dx = dx*120/100;
System.out.println(dx)