一些注意事项:
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结构,优先选择三元运算符,原因为简洁,运行效率高。