运算基本于就是 加减乘除余( + - * / % ),
整型
运算溢出
由于整型存在不同的取值范围,当整型的运算超出该整型的取值范围时,就会出现溢出,而溢出不会返回错误,却会出现一个特别的结果。
byte:-128 ~ 127
short: -32768 ~ 32767
int: -2147483648 ~ 2147483647
long: -9223372036854775808 ~ 9223372036854775807
public class Calculate {
public static void main(String[] args ) {
int a = 2147483647;
int b = 10;
int number = a + b;
System.out.println(number ); // -2147483639
}
}
自增、自减
int a = 1;
a++; // 同等于 a = a + 1;
a--; // 同等于 a = a - 1;
++ 或 – 写在前面和后面的运算是不同的,++a 表示先加 1 再引用 a,a++ 表示先引用 a 再加1。
位运算
位运算符:&、|、~、^(与、或、非、异或)
n = 0 & 0; // 0
n = 0 & 1; // 0
n = 1 & 1; // 1
'与' 运算符(&)必须两个数同时为1,返回1,否则返回0。
n = 0 | 0; // 0
n = 0 | 1; // 1
n = 1 | 1; // 1
'或' 运算符(|)只要一个数为1,返回1,否则返回0。
n = ~0; // 1
n = ~1; // 0
'非' 运算符(~)取反。
n = 0 ^ 0; // 0
n = 0 ^ 1; // 1
n = 1 ^ 1; // 0
'异或' 运算符(^)两个数不同结果为1。
运算优先级
- ()
- ! ~ ++ –
-
- / %
-
-
- << >> >>>
- &
- |
- += -= *= /=
运行时的类型提升和转换:如果运算时两个数类型不同,计算结果为较大的类型。如 short 和 int 类型运算,返回结果是 int 类型,short 类型会被提升成 int 类型;可以将类型强制转换,强制转型使用(类型),但是转换的值如果超出该转换的类型的范围值就会得到一个错误的结果!
short a = 1234;
int b = 123456;
int c = a + b; // a 会变 int, 结果 124690
short d = a + b; // 编译错误!
int i = 12345;
short s = (short) i; // 12345
int i1 = 1234567;
short s1 = (short) i1; // -10617
int i2 = 12345678;
short s2 = (short) i2; // 24910
浮点型
整型和浮点型运算只能进行加减乘除这些计算,不能做位运算和移位运算。
溢出
整数运算在除数为0时会报错,而浮点数运算在除数为0时,不会报错,但会返回几个特殊值:
- NaN表示Not a Number
- Infinity表示无穷大
- Infinity表示负无穷大
强制转型
可以将浮点数强制转型为整数。在转型时,浮点数的小数部分会被丢掉。如果转型后超过了整型能表示的最大范围,将返回整型的最大值;如果要进行四舍五入,可以对浮点数加上0.5再强制转型。
int n1 = (int) 12.3; // 12
int n2 = (int) 12.7; // 12
int n2 = (int) -12.7; // -12
int n3 = (int) (12.7 + 0.5); // 13
int n4 = (int) 1.2e20; // 2147483647
double d = 2.6;
int n = (int) (d + 0.5); // 3
布尔型
基本与JavaScript相同;
布尔运算是一种关系运算,包括以下几类:
- 比较运算符:>,>=,<,<=,==,!=
- 与运算 &&
- 或运算 ||
- 非运算 !
三元运算:c ? a : b;// a条件成立为true则 c = a,a条件不成立则 c = b。