1.位运算:位运算是直接对整数的二进制的运算
结论:
1.位运算符操作的都是整形的数据
2.①<< : 在一定范围内,每向左移1位,相当于 *2
②>> : 在一定范围内,每向右移1位,相当于 /2
eg:①<<左移 3<<2= 结果 3*2 *2=12 。 >>右移 3>>1=1 结果 3/2=1
②无符号右移>>> 3>>>1=1 结果 3/2=1 ③ & 与运算 6&3=2 ④| 或运算 6|3=7 ⑤异或运算^ 6^3=5 ⑥取反运算~ ~6=-7
注意 无<<<
逻辑运算符:例题
说明 : 逻辑运算操作的都是boolean类型的变量
逻辑与
短路与
区分&与 &&
//相同点1:& 与&&的运算结果相同
//相同点2:当符号左边是true时,两者都会执行符号右边的运算
//不同点:当符号左边是false时,&继续执行符号右边运算,&&不在执行符号右边的运算
eg:1 int x=1; int y=2; if(x++==2 & ++y==2){ //++在后先运算为false x=2 ++在前先加1为true y=2 x=7; } System.out.println("x="+x+",y="+y); //最终结果x=2,y=2 eg2; int x=1,y=1; if(x++==2 && ++y==2){ //++在后先运算为false x=2 ++y==2不看(短路) x=7; } System.out.println("x="+x+,"y="+y);//结果x=2,y=1 eg1; int x = 1,y = 1; if(x++==1 | ++y==1){ //x=2 为true y=2为false 进入x=7的运算 x=7; } System.out.println("x="+x",y="+y"); //结果x=7,y=2 eg:2 int x =1,y = 1; if(x++==1 || ++y=1){ //x=2为true 后面++y==1短路 进入x=7的运算 x=7; } System.out.println("x="+x+",y=+y");// x=7,y=1
逻辑或
短路或
区分:| 与 ||
//相同点1:| 与 ||的运算结果相同
//相同点2:当符号左边是false时,两者都会执行符号右边的运算
//不同点3:当符号左边是true时,| 继续执行符号右边的运算, 而 || 不在执行符号右边的运算。
//开发中,推荐使用 ||。
三元运算符:
1.结构:(条件表达式)?表达式1 :表达式2
2.说明:
①条件表达式的结果为boolean类型。
②根据条件表达式真或假,决定执行表达式1,还是表达式2.
③如果表达式为true,则执行表达式1.
④如果表达式为false,则执行表达式2.
⑤表达式1和表达式2要求是一致的。
⑥三元运算符可以嵌套使用。
3.
①凡是可以使用三元运算符的地方,都可以改写为if-else,反之不成立
②如果程序可以使用三元运算符,又可以使用if-else结构,那木优先用三元运算符。原因:简洁,执行效率高。
int num1 = 10; int num2 = 20; System.out.println("num1 = "+ num1 + ",num2 = "+num2); //方式一:定义临时变量的方式 //推荐方式 int temp = num1; num1 = num2; num2 = temp; System.out.println("num1 ="+num1 +",num2 =" + num2); //方式二: 好处:不用定义临时变量 //弊端: ①相加操作可能超出存储范围 ② 有局限性:只能用于数值类型 num1 = num1 + num2; num2 = num1 - num2: num1 = num2 - num2; System.out.println("num1 ="+ num1 +",num2 =" + num2); //方法三:使用位用算符 //有局限性:只能使用于数值类型 num1 = num1 ^ num2; num1 = num1 ^ num2; num1 = num1 ^ num2; System.out.println("num1 = " + num1 +",num2 = " + num2);