逻辑运算符
逻辑运算符只能⽤于 boolean 类型的数据运算,判断 boolean 数据之间的逻辑关系,与、或、⾮。
&(与)、|(或)、!(⾮)、&&(短路与)、||(短路或)
与&
变量1 & 变量2:只有当变量 1 和变量 2 都为 true,结果为 true,否则为 false。
或|
变量1 | 变量2:变量 1 和变量 2 只要有⼀个为 true,结果为 true,否则为 false。
非!
!变量1:若变量 1 为 true,结果为 false,若变量 1 为 false,结果为 true。
异或^
变量相同为false,相反为true
短路与&&
只要符号左边为false,则右边表达式不再执行,直接返回false
短路或||
只要符号左边为true,则右边表达式不再执行,直接返回true
位运算符
&(按位与)、|(按位或)、^(按位异或)、 ~(按位取反) 、<<(左移)、 >>(右移) 、>>>(无符号右移位)
1.变量1 & 变量2:先把变量 1 和变量 2 转为⼆进制,每⼀位的数字⼀⼀对应,进⾏⽐较判断,若都为 1,则该位记做 1,否则记做 0。
2.变量1 | 变量2:先把变量 1 和变量 2 转为⼆进制,每⼀位的数字⼀⼀对应,进⾏⽐较判断,只要有⼀ 个为 1,则该位记做 1,否则记做 0。
3.变量1 ^ 变量2:先把变量 1 和变量 2 转为⼆进制,每⼀位的数字⼀⼀对应,进⾏⽐较判断,相同记做 0,不同记做 1。
4.<<(左移):左边最高数值位丢弃,右边空缺补0 :将要移动的数扩大2^n n:就是移动的位数1;就是将运算符的二进制码整体左移指定位数,左移之后的空位使用0来填充
5.>>(右移): 右移是将运算符的二进制整体右移,右移之后空出来的位置以符号位填充。如果是正数则使用0填充,如果是负数则使用1填充
6.>>>(无符号右移位) :是以0来填充空出来的位置
例题
把a与b的值进行交换
方法一 int a=1;
int b=2;
int c;
c = a;
a=b;
b=c;
方法2 左边aba,右边a^b
a=a^b;
b=a^b;//b=a^b^b=a
a=a^b;//a=a^b^a=b
方法3
a=a+b;
b=a-b;//b=a+b-b=a
a=a-b;//a=a+b-a=b
方法4
b=(a+b)-(a=b);
三目运算符
根据不同的条件给同⼀个变量赋不同的值,变量 = 条件?值1:值2.
int a=1;
int b=2;
int max;
max=(a<b) ?a:b;
System.out.println(max);
package org.wdit.unit01;
public class OperatorDemo {
public static void main(String[] args){
int x=3;
int y=4;
boolean flag;
flag = (x == y);
System.out.println("==:"+flag);
flag = (x != y);
System.out.println("!= :"+(flag));
}
}
package org.wdit.unit01;
public class OperatorDemo2 {
public static void main(String[] args){
int a = 1;
int b = 2;
int c = 3;
//& 有false,则false
System.out.println((a > b) & (a < c));
System.out.println((a > b) & (a > c));
System.out.println((a < b) & (a < c));
System.out.println((a < b) & (a > c));
System.out.println("-----------------------------------");
//|:有true,则true
System.out.println((a>b)|(a<c));
System.out.println((a>b)|(a>c));
System.out.println((a<b)|(a<c));
System.out.println((a<b)|(a>c));
System.out.println("-------------------------------------");
//!非
System.out.println(!(a<b));
//^:相同为false,相反为true
System.out.println((a>b)^(a>c));
System.out.println((a>b)^(a<c));
System.out.println((a<b)^(a>c));
System.out.println((a<b)^(a<c));
}
}
package org.wdit.unit01;
public class OperatorDemo3 {
public static void main(String[] args){
int a=3;
int b=4;
int c=5;
boolean flag = (++a==4)&&(++b==a);
System.out.println("flag:"+flag);
System.out.println("a:"+a);
System.out.println("b:"+b);
}
}
package org.wdit.unit01;
/**
*交换数据
*/
public class OperatorDemo4 {
//主方法
public static void main(String[] args){
//声明变量
//方法一
int a=1;
int b=2;
// int c;
// c = a;
// a=b;
// b=c;
// System.out.println(a);
// System.out.println(b);
// //方法2 左边aba,右边a^b
// a=a^b;
// b=a^b;//b=a^b^b=a
// a=a^b;//a=a^b^a=b
// System.out.println(a);
// System.out.println(b);
// //方法3
// a=a+b;
// b=a-b;//b=a+b-b=a
// a=a-b;//a=a+b-a=b
// System.out.println(a);
// System.out.println(b);
b=(a+b)-(a=b);
System.out.println(a);
System.out.println(b);
}
}
package org.wdit.unit01;
public class OperatorDemo5 {
public static void main(String[] args){
int a=1;
int b=2;
int max;
max=(a<b) ?a:b;
System.out.println(max);
}
}