运算符的理解
运算符
算数运算符:
- +
- -
- 乘以
- /
- %(取余数)模运算
- ++
- –
public class demo01{
public static void main(String[] args){
int a =10;
byte b =20;
System.out.println(a+b); //结果类型为int
//只要整数加减乘除,如果没有long的类型,默认会统一转换为int类型
long d =1237192381273891723891289L;
byte e = 12;
System.out.println(d+e); //结果类型为LONG
//只要出现long类型,结果都会默认转换为long类型
//只要出现double类型,结果都会默认转换为double类型
/*
注意点:
如果结果出现浮点数,没有转换类型的情况下会得到0的结果。
*/
//System.out.println(a/b);//实际结果为0.5,得到结果为0,因为未转换浮点数
System.out.println(a/(double)b); //正确表达方式
}
}
计算的自动转换规则:
- 只要整数加减乘除,如果没有long的类型,默认会统一转换为int类型
- 只要出现long类型,结果都会默认转换为long类型
- 只要出现double类型,结果都会默认转换为double类型
单词:cast 转换
idea快捷操作:ctrl+d 快速复制上一行
package operator;
public class demoday01 {
public static void main(String[] args) {
int a = 10;
byte b =20;
long c=100L;
double d =3.14;
System.out.println(a+b); //不出现浮点数和long类型,默认转换为int
System.out.println(a-c); //出现long类型,自动转换为long类型
System.out.println(c*d); //出现浮点数,自动转换为浮点数类型,由于离散型,后缀会不准
System.out.println(a/(double)b); //出现浮点数我们要转换为浮点数才会计算,不然只会得到0
short g1 = 5;
short g2 = 2;
System.out.println(g1/g2);//2 int类型,不会出现浮点数
System.out.println(g1%g2);//1 模运算 取余数
System.out.println(g1/(double)g2);//2.5
}
}
自增自减的运算规则
a++跟++a的区别
b=a++相当于,b=a,然后a=a+1
b=++a相当于a=a+1,然后才轮到b=a
等号前面就先赋值,等号后面就先计算再赋值
package operator;
public class demo03Day06 {
public static void main(String[] args) {
int a = 2;
int b =a++; //相当于先运算b=a,然后a=a+1
int c =++a; //相当于a=a+1,然后c =a
System.out.println(b); //2
System.out.println(c); //4
}
}
赋值运算符: =
关系运算符:
- >
- <
- >=
- <=
- ==
- !=
- instanceof
package operator;
public class demo02Day06 {
public static void main(String[] args) {
int a = 1;
int b = 1;
int c = 2;
byte d = 2;
double e =2.123123;
float f = 2.123123f;
short g =5;
System.out.println(a==b);//true
System.out.println(a==c);//false
System.out.println(d==c);//true
System.out.println(d!=e);//true
System.out.println(f==e);//false 精度错误 避免浮点数做比较
System.out.println(c<=e);//true 避免浮点数做比较
System.out.println(g/c);//未转换类型就=2
//模运算,也就是取余数
System.out.println(g/(double)c);//正确
System.out.println(g%c);//模运算 结果=1
}
}
逻辑运算符
- && (与)and
- || (或)or
- ! (非)not取反
package operator;
public class demo04Day06 {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
boolean c =true;
System.out.println(a&&b);//两个为真才为真
System.out.println(a||b);//其中一个为真就是真
System.out.println(!(a&&b));//只要其中一个假的,就是真。只要两个都是真,才是假。
System.out.println(!(a&&c));//只要两个都是真,才是假。只要其中一个假的,就是真。
//短路运算
int d =5;
boolean f = false;
System.out.println(f&&(d>d++));//头部分只要是假的,就停止后面的运算了
System.out.println(d);//本来d++是先运算的可以等于6,条件是真的。但是头一部分是假的就直接退出运算了
}
}
位运算符(二进制才使用)
A =0011 0101
B=1001 0010
A&B =0001 ,1000 //and,如果上下相同就为1,或者为0
A|B =1011 0111 //或者,如果只要上下一个为1就为1
A^B =0101 1000 //取反,如果上下两位相同,则为1,否为0
~A =1100 1010 //取反
2<<3 2右移3位,相当于2乘以2乘以2乘以2
0000 0000为0
0000 0001 为1
0000 0010 为2,右移三位 0001 0000
0000 0011 3
0000 0100 4
0000 0101 5
0000 0110 6
0000 0111 7
0000 1000 8
0001 0000 为16
课外扩展
java计算幂,数字的多少次方.
Math是java重要的数学运算库
引用Math库的pow计算。
package operator;
public class demo03Day06 {
public static void main(String[] args) {
double d =Math.pow(2,4); //2的四次方,输出为浮点数
System.out.println(d);
}
}