1. 算术运算符
-
+
-
-
-
*
-
/
-
%
取余或取模 -
整数被0除会产生一个异常,而浮点数被0整除将会得到无穷大或NaN结果
看一个取模的例子,Java中两个整数的除法的结果为整数,除不尽时采取的措施时是舍弃小数位,如 10/3 = 3, -5/2=-2, 取余的结果要根据除法的结果得出,a % b = a - (a / b) * b
int a = 17 % 3;
int b = 17 % -3;
int c = -17 % 3;
int d = -17 % -3;
System.out.println(a + " " + b + " " + c + " " + d); // 2 2 -2 -2
2. 数学函数与常量
- Math.sqrt()
- Math.pow()
// Math.sqrt(double x)
double x = 4;
double y = Math.sqrt(x);
System.out.println(y);
//Math.pow(double x, double a) x ^ a
double z = Math.pow(2, 5);
System.out.println(z);
取整
- Math.floor()
- Math.ceil()
System.out.println(Math.ceil(3.2)); // 4.0
System.out.println(Math.floor(3.2)); // 3.0
三角运算
- Math.sin()
- Math.cos()
- Math.tan()
System.out.println(Math.sin(Math.PI/6));
System.out.println(Math.cos(Math.PI/2));
System.out.println(Math.tan(Math.PI/2));
/*
0.49999999999999994
6.123233995736766E-17
1.633123935319537E16
*/
常量值:
- Math.PI
- Math.E
System.out.println(Math.PI);
System.out.println(Math.E);
/*
3.141592653589793
2.718281828459045
*/
指数与对数运算
- Math.exp()
- Math.log()
- Math.log10()
System.out.println(Math.exp(Math.log(5)));
System.out.println(Math.log(Math.E * Math.E));
System.out.println(Math.log10(1000));
/*
4.999999999999999
2.0
3.0
*/
3. 自动类型转换
数值类型之间的自动类型转换:
- byte ----> short -----> int -----> long,char------> int 低精度自动转向高精度,不会造成信息的丢失,
- int------> float, long----->float, 都有可能造成精度的损失
- int------->double. 不会造成精度的丢失
- long------> double有可能造成精度的损失
4. 强制类型转换
cast
,强制类型转换
比如将一个double强转成int
double d = 9.75;
int n = (int) d; // n的值为9
如果相对浮点数进行四舍五入运算,可以用Math.round(), 返回的是一个long
double d = 9.50;
int n = (int) Math.round(d); // n的值为10
- 将一个数值从一种类型强制转换成目标类型时,其本身的值又超过了目标类型的范围,那么就可能截断成完全不同的值,比如(byte) 300的实际值最终为44;int类型的300的二进制位32位,前23位都是0,后9位分别是1 0010 1100,强转成byte后,只保留后8位,此时二进制位 0010 1100,即44
- 不要在boolean类型与任何数值类型之间强制类型转换
5. 赋值运算符
-
=
赋值运算符 -
+=
,-=
,*=
,/=
,%=
复合赋值运算符 -
注意在复合赋值运算符中发生的强制类型转换,如
int a = 3; a += 3.5; //这里并不会报错,而是发生了隐式的强制类型转换,等价于 a = (int) (a + 3.5)
6. 自增自减运算符
-
前缀形式:
++n
,--n
-
后缀形式:
n++
,n--
-
前缀形式和后缀形式的异同:均会使得变量值加1或者减1;但用在表达式中时,前缀形式会先完成变量值加1然后再进行其它操作,而后缀形式会使用原来变量的值。
int a = 3; int b = 3; int c = a++; // c = 3, a = 4 int d = ++b; // d = 4, b = 4
7. 关系和boolean运算符
==
和!=
< <= > >=
!
逻辑非、&&
逻辑与、||
逻辑或:逻辑与如果第一个表达式为false,那么后一个条件便不会计算;同理,如果逻辑或第一个表达式为true,那么也无须计算第二个条件?:
三元运算符A? B : C
, 如果A表达式的结果为true,则返回B表达式的值,否则返回C表达式的值
8. 位运算符
处理整形类型时,可以直接对组成整数的各个位完成操作。位运算符包括:
&
(and) 与|
(or) 或^
(xor) 异或~
(not) 非>>
右移运算符,符号位填充高位<<
左移运算符,0填充低位>>>
类似于右移运算符,但该运算符用0填充高位,而非符号位填充高位
9.括号与运算符优先级
- 括号的优先级最高
- 同一个优先级别的运算符按照从左至右的顺序进行计算(右结合运算符除外,如+=是从右至左运算)
- 不使用括号时,优先级顺序如下表: