一些注意事项:
1.
int i1=12;
int i2=5;
double d1=i1/i2; //2.0
double d1=i1/i2+0.0; //2.0
double d1=i1/(i2+0.0); //2.4
double d1=(double)i1/i2; //2.4
double d1=(double)(i1/i2); //2.0
2.取余结果的符号与被除数的符号相同。
3.自增1不会改变变量原本的数据类型。
赋值运算符
1.拓展赋值运算符不会改变变量原本的数据类型,例如:
short s1=10;
s1=s1+2; //编译出错
s1+=2; //s1=12
逻辑运算符
注意:
1.逻辑与若为假,后面运算可以进行;短路与若为假,后面运算不能进行。
boolean b1=false;
int i1=10;
if(b1&(i1++>0)){
System.outprintln("正确");
else{
System.out.println("错误");
}
}
System.out.println("i1="+i1);
/*输出:错误
11*/
boolean b2=false;
int i2=10;
if(b2&&(i2++>0)){
System.outprintln("正确");
else{
System.out.println("错误");
}
}
System.out.println("i2="+i2);
/*输出:错误
10*/
2.逻辑或与短路或的区分
(1)相同点:逻辑或与短路或的运算结果相同,当符号左边是false时,二者都会执行符号右边的运算
(2)不同点:当左边符号时true时,逻辑或|继续执行符号右边的运算,而短路或||不再执行符号右边的运算。
(3)开发中优先使用短路或&&
boolean b3=true;
int i3=10;
if(b3|(i3++>0)){
System.outprintln("正确");
else{
System.out.println("错误");
}
}
System.out.println("i3="+i3);
/*输出:正确
11*/
boolean b4=true;
int i4=10;
if(b4&&(i4++>0)){
System.outprintln("正确");
else{
System.out.println("错误");
}
}
System.out.println("i4="+i4);
/*输出:正确
10*/
记忆窍门:如果能通过前半部分判断出来结果了,短路操作就不用进行后半部分的操作了
位运算符
规律:
1.每左移一位,乘2,左移两位,乘4。
public static void main(String[] args){
int=21;
System.out.println("i<<2:"+(i<<2)); //84
}
2.每右移一位,除以2,最高位是0,右移后,空缺位拿0补。若最高位是1,空缺未补1。
3..无符号右移,都拿0来补
4.位运算符操作的都是整型的数据。
5.位运算符与或非都是对二进制的位数来进行操作的。
int m=12;
int n=5;
System.out.println("m&n:"+(m&n)); //m&n:4
System.out.println("m|n:"+(m|n)); //m|n:13
System.out.println("m^n:"+(m^n)); //m^n:9
6.m=k^n=(m^n)^n,两个亦或运算^过后会变回原样。
7.取反:二进制每位取反
三元运算符
clsss SanYuanTest{
public static void main(String[] args){
int m=12;
int n=5;
int max=(m>n)?m:n;
System.out.println(max);
}
}
//12
结论:
1.凡是可以使用三元运算符的地方,都可以改写为if-else,反过来不行。
2.若程序既可以选择三元运算符,也可以选择if-else结构,优先选择三元运算符,原因为简洁,运行效率高。