- 当参与/运算的两个操作数都是整数时,表示为整数除法,否则表示为浮点数除法。
- 整数取余操作称之为取模
- 浮点数被0除灰得到无穷大或者NaN
数学函数与常量
- 可以在源文件前加
import static java.Math.*;
平方根Math.sqrt(x)
幂运算 Math.pow(x,a)
x的a次幂,其返回类型为double类型
数值类型之间的转换
image.pngimage.png
<center class="half">
- 其中一个是double,则转换为double
- 否则其中一个是float,则转换为float
- 否则其中一个是long,则转换为long
- 否则两个转为int
强制类型转换(cast)
(想转换的类型)变量名
double x = 9.997;
int nx = (int) x;
截断小数部分将浮点值转换为整型
如果舍入运算,可以使用Math.round(x)
方法
double x =999.7;
int nx = (int)Math.round(x);
结果为10
Math.round 返回的类型为long,所以使用(int)强转
结合赋值和运算符
x+=4;
等价于x=x+4
- 如果x为int进行x+=3.5;那么会将结果强制转换为int即(int)(x+3.5)运算符得到一个值,其类型与等号左侧类型不同,就会强制类型转换
自增自减运算符
- n++将变量的值加一
- n--将变量的值减一
如果是++n则是先执行加一,而后者会使用原来的变量值
int m = 7;
int n = 7;
int a = 2 * ++m;// now a is 16,m is 8;
int b = 2 * n++;// now b is 14, n is 8;
关系和boolean运算符
**要检测相等性,可以使用==
。可以使用!=
检测不等
- <(小于)、>(大于)、<=(小于等于)、>=(大于等于)
- &&(与)||(或)
- 三元操作符?:
condition?expression1:expression2
如果条件为true 则执行第一个表达式,如果为false则执行第二个表达式;
x<y?x:y//会返回xy中较小的一个
位运算符
直接对组成整型数值的各个位完成操作,通过掩码技术的得到整数中的各个位,位运算符用来对二进制位进行操作
&("and")|("or")^("xor")~("not")
- 按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、按位左移(<<)、按位右移(>>)
-
按位与(&)
对两个数进行操作,然后返回一个新的数,这个数的每个位都需要两个输入数的同一位都为1时才为1,如下图:
(A & B) 结果为 12, 二进制为 0000 1100
-
按位或(|)
比较两个数,然后返回一个新的数,这个数的每一位设置1的条件是两个输入数的同一位都不为0(即任意一个为1,或都为1),如下图:
(A | B) 结果为 61, 二进制为 0011 1101
-
按位异或(^)
比较两个数,然后返回一个数,这个数的每个位设为1的条件是两个输入数的同一位不同,如果相同就设为0,如下图:
(A ^ B) 结果为 49, 二进制为 0011 0001
-
按位取反(~)
对一个操作数的每一位都取反,如下图:
(~A ) 结果为 -61, 二进制为 1100 0011
7e7f7909c93d70cf71c2d394f3dcd100baa12b2b.jpg
-
按位左移(<<)
将操作数的所有位向左移动指定的位数。
下图展示了11111111 << 1(11111111 左移一位)的结果。蓝色数字表示被移动位,灰色表示被丢弃位,空位用橙色的0填充。
(A << 2)结果为 240, 二进制为 1111 0000
-
6
按位右移(<<)
将操作数的所有位向又移动指定的位数。
下图展示了11111111 >> 1(11111111 右移一位)的结果。蓝色数字表示被移动位,灰色表示被丢弃位,空位用橙色的0填充。
A >> 2 结果为 15, 二进制为 0000 1111
c2bce2039245d688833ac93dafc27d1ed21b242b.jpg
括号与运算符级别
-
&&
比||
优先级高,所以a &&b || c
等价于(a &&b) || c
-
+=
是又结合运算符,所以a+=b+c
等价于a+=(b+=c)
63d9f2d3572c11df57c9a205612762d0f703c2f8.jpg
枚举类型
枚举类型包括有限个命名的值
enum Size={SMALL,MEDIUM,LARGE,EXTRA_LARGE);
可以声明变量:
Size s = Size.MEDIUM;
网友评论