逻辑运算符
- 逻辑运算符:逻辑运算符的运算结果位boolean类型
- &:运算两端,只要由一端为false,其最终结果为false,只有两端均为true,结果才是true。【真真才真】
- |:运算两端,只要由一端为true,其最终结果为true,只有两端均为false,结果才是false。【假假才假】
- !:取反。
- ^:相同为false,不同为true。
- &&:和&在运算结果上没有区别,在运算效率有区别:&运算两端表达式都会执行,&&左端表达式为false时,其右端表达式就不会执行。
- ||:和|在运算结果上没有区别,在运算效率有区别:|运算两端表达式都会执行,||左端表达式为true时,其右端表达式就不会执行。
-
int a=10; int b=20; //& boolean flag1=a>10&b>20; System.out.println("flag1:"+flag1); //| boolean flag2=a>10|b>20; System.out.println("flag2:"+flag2); //! System.out.println(a==b);//false System.out.println(!(a==b));//true //^ System.out.println(true^true);//false System.out.println(true^false);//true
位运算符
位运算符:直接对二进制补码进行运算,运算效率高。
int a=3;
int b=4;
// &:有0则0
// 0 0000011 3的补码
// & 0 0000100 4的补码
//---------------------------
//0 0000111
System.out.println(a&b);
// |:有1则1
// 0 0000011 3的补码
// | 0 0000100 4的补码
//---------------------------
// 0 0000111
System.out.println(a|b);
// ^:相同则0,不同则1。
// 0 0000011 3的补码
// ^ 0 0000100 4的补码
//---------------------------
// 0 0000111
System.out.println(a^b);
//~:按位取反,0变1 1变0 符号位也包含在内取反
// ~ 0 0000011 3的补码
// 1 1111100
System.out.println(~a);
// <<:左移
System.out.println(3<<2);//把3左移两位
// << 0 0000011 3的补码
// 0 0001100
// >>:右移 被移位的二进制最高位是0,右移后空缺位补0,最高位是1,最高位补1.
System.out.println(3>>2);//把3右移两位
// >> 0 0000011 3的补码
// 000000
// 补齐 0 0000000
// >>> 无符号右移: 不管正负,最高位都补0
System.out.println(3>>>2);
// >>> 0 0000011 3的补码
// 000000
//补齐 0 0000000
三元运算符
//三元运算符
//表达式? 结果1:结果2
//当表达式结果为true,返回结果1,结果位false,返回结果2
int a=20;
int b=123;
int c=321;
int max=a>b?a:b;
max=max>c?max:c;
Ststem.out.println("max:"+max);