- 整数运算:简单的就不记了,稍微记几个就得了
除法求整数 int x = 12345 / 67
求余:int y = 12345 % 67
特别注意:整数的除法对于除数为0时运行时将报错,但编译不会报错。溢出不会出错,却会得到一个奇怪的结果。
简写的运算符:
n += 100; // 3409, 相当于 n = n + 100;
n -= 100; // 3309, 相当于 n = n - 100;
n++; // 3301, 相当于 n = n + 1;
n--; // 3300, 相当于 n = n - 1;
移位运算:对整数7左移1位将得到整数14,左移(<<)两位将得到整数28,如果对一个负数进行右移,最高位的1不动,结果仍然是一个负数。左移实际上就是不断地×2,右移实际上就是不断地÷2。对byte和short类型进行移位时,会首先转换为int再进行位移。
int n = 7; // 00000000 00000000 00000000 00000111 = 7
int a = n << 1; // 00000000 00000000 00000000 00001110 = 14
int b = n << 2; // 00000000 00000000 00000000 00011100 = 28
无符号右移:有一种无符号的右移运算,使用>>>,它的特点是不管符号位,右移后高位总是补0,因此,对一个负数进行>>>右移,它会变成正数,原因是最高位的1变成了0:
- 位运算
位运算是按位进行与(&)、或(|)、非(~)和异或(^)的运算。
异或运算的规则是,如果两个数不同,结果为1,否则为0. - 强制转型
short s = (short) i; // 12345
- 浮点数运算
由于浮点数存在运算误差,所以比较两个浮点数是否相等常常会出现错误的结果。正确的比较方法是判断两个浮点数之差的绝对值是否小于一个很小的数:
// 比较x和y是否相等,先计算其差的绝对值:
double r = Math.abs(x - y);
//求平方根可用 Math.sqrt():
// 再判断绝对值是否足够小:
if (r < 0.00001) {
// 可以认为相等
} else {
// 不相等
}
NaN表示Not a Number
Infinity表示无穷大
-Infinity表示负无穷大
如果要进行四舍五入,可以对浮点数加上0.5再强制转型:
- 布尔运算
对于布尔类型boolean,永远只有true和false两个值。
布尔运算是一种关系运算,包括以下几类:
比较运算符:>,>=,<,<=,==,!=
与运算 &&
或运算 ||
非运算 !
- 三元运算符
ava还提供一个三元运算符b ? x : y,它根据第一个布尔表达式的结果,分别返回后续两个表达式之一的计算结果。示例:
参考文献:
https://www.liaoxuefeng.com/wiki/1252599548343744/1255938640048480