Java基础运算符03(逻辑运算符与位运算符)

发布时间 2023-08-19 00:30:33作者: 是葳蕤

逻辑运算符

  • 逻辑运算符有三种,与(and)或(or)非(取反)
public class Demo {
    public static void main(String[] args) {
        boolean a= true;
        boolean b= false;
        System.out.println("a && b:"+(a&&b));//逻辑与运算:两个都是真才为真,结果才是true
        System.out.println("a || b:"+(a||b));//逻辑或运算:两个中只要有一个是真结果就是true
        System.out.println("!(a && b):"+!(a&&b));//取反:如果是真,则结果为假,如果是假,结果则为真
    }
}

输出结果:

a && b:false
a || b:true
!(a && b):true

Process finished with exit code 0
  • 在这里还有一个短路运算,就是当第一步已经判断出结果时,就不再继续向后运算,比如 System.out.println("a && b:"+(a&&b));这里如果a是假后边就不再判断b了,直接返回结果,代码实验如下:
public class Demo {
    public static void main(String[] args) {
        int a=10;
        boolean b =(a<10)&&(a++<10);
        System.out.println(b);
        System.out.println(a);
    }
}

输出结果:

false
10//如果判断完a之后还进行运算的话,a++此时输出的结果应该是11,但是结果为10,由上一节我们知道a++只要调用必定执行,但是这里没执行,所以我们判定,这里判断完a为假之后,并没有执行后边的命令

Process finished with exit code 0

位运算

  • 位运算是二进制里边的运算:二进制里&同样表示与,|表示或,~表示非,^为抑或(相同为0不同为1),<<为左移,>>为右移
  • 如:A = 0000 1101,B = 1110 0011,那么A&B为0000 0001,A|B为1110 1111,~B为0001 1100,A^B为1110 1110
  • 问:在计算机里2乘8=16怎么运算最快,因为在计算机里是无法识别8的,所以拆分成2乘2乘2,2乘8=2乘2乘2乘2
  • <<,>>左移右移是什么效果?原理是什么?如下:
public class Demo {
    public static void main(String[] args) {
        System.out.println(3<<1);
        System.out.println(3>>1);
    }
}

输出结果:

6
1

Process finished with exit code 0

在二进制中3是0011,向左移一位变成了0110转换为十进制也就是6,同理向右移一位0011就变成了0001,转换回十进制依旧是1