System.out.println(1.0 / 0);(0是无限接近0)infinity
System.out.println(1 / 0);ERROR
int x=7510; x = x / 1000 * 1000; x= ? (7000)
short s = 3; s = s + 2;(报错)
与s += 2;有什么不同?(+=, -=, *=, /=, %=有隐式转换)
比较算算符
比较运算符的结果都是boolean型,也就是要么是true,要么是false。
逻辑运算符
System.out.println(true & true);//true System.out.println(true & false);//false System.out.println(false & true);//false System.out.println(false & false);//false //=============================== System.out.println("/==============================="); System.out.println(true | true);//true System.out.println(true | false);//true System.out.println(false | true);//true System.out.println(false | false);//false //=============================== System.out.println("/==============================="); System.out.println(true ^ true);//false System.out.println(true ^ false);//true System.out.println(false ^ true);//true System.out.println(false ^ false);//false //=============================== System.out.println("/==============================="); boolean b= true; System.out.println(!b);//false System.out.println(!!true);//true //=============================== System.out.println("/============短路与================="); System.out.println(true && true);//true System.out.println(true && false);//false System.out.println(false && true);//false System.out.println(false && false);//false //=============================== System.out.println("/============短路或================="); System.out.println(true || true);//true System.out.println(true || false);//true System.out.println(false || true);//true System.out.println(false || false);//false
/* 短路与: 特点:当&&左边的运算为false的时候,就不再判断&&后面的运算了 短路或: 特点:当||左边的运算为true的时候,就不再判断||后面的运算了 */ System.out.println("------------"); //System.out.println((3==4) & (1/0==1));//出现异常,说明程序运行了(1/0==1) System.out.println((3==4) && (1/0==1));//没有异常,那是因为没有运行 && 后面的语句 System.out.println("------------"); //System.out.println((3==3) | (1/0==1));//出现异常,说明程序运行了(1/0==1) System.out.println((3==3) || (1/0==1));//没有异常,那是因为没有运行 || 后面的语句 System.out.println("------------");
逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。
位运算操作
/* 二进制数 a 二进制数 b 与(&) 或(|) 异或(^) 0 0 0 0 0 1 0 0 1 1 1 0 0 1 1 1 1 1 1 0 */ /* 3的二进制: 0b00000000_00000000_00000000_00000011 & 5的二进制: 0b00000000_00000000_00000000_00000101 -------------------------------------------------------- 0b00000000_00000000_00000000_00000001 */ System.out.println("3 & 5= "+ (3 & 5));//1 /* 3的二进制: 0b00000000_00000000_00000000_00000011 | 5的二进制: 0b00000000_00000000_00000000_00000101 -------------------------------------------------------- 0b00000000_00000000_00000000_00000111 1 * 2的0次方 + 1 * 2的1次方 + 1 * 2的2次方==7 */ System.out.println("3 | 5= "+ (3 | 5));//7 /* 3的二进制: 0b00000000_00000000_00000000_00000011 ^ 5的二进制: 0b00000000_00000000_00000000_00000101 -------------------------------------------------------- 0b00000000_00000000_00000000_00000110 0 * 2的0次方 + 1 * 2的1次方 + 1 * 2的2次方==6 */ System.out.println("3 ^ 5= "+ (3 ^ 5));//6 //移位 /* 8的二进制: 00000000_00000000_00000000_00001000 000000_00000000_00000000_0000100000 8的二进制: 00000000_00000000_00000000_00001000 0000000000_00000000_00000000_000010 */ System.out.println("8 << 2= "+ (8 << 2));//32 System.out.println("8 >> 2= "+ (8 >> 2));//2 System.out.println("负数移位"); /* -8二进制原码: 源码: 10000000_00000000_00000000_00001000 取反: 11111111_11111111_11111111_11110111 补码(+1): 11111111_11111111_11111111_11111000 运算: 11111111_11111111_11111111_11111110 取反: 10000000_00000000_00000000_00000001 补码(+1): 10000000_00000000_00000000_00000010 */ System.out.println("-8 >> 2= "+ (-8 >> 2));//-2 System.out.println("-8 >>> 2= "+ (-8 >>> 2));// 1073741822
左移操作“<<”:将运算数的二进制码整体左移指定位数,左移之后的空使用“0”来补充。
右移操作“>>”:将运算数的二进制码整体右移指定位数,右移之后的空使用“符号位”来补充。
若是正数使用“0”补充;
若是负数使用“1”补充;
无符号右移">>>":将运算数的二进制码整体右移指定位数,右移之后的空使用“0”来补充(不管正负)