Java 逻辑运算符

Java 逻辑运算符

逻辑与( && )a&&b,a和b都为真则为真
逻辑或( || )a||b,a和b都为假则为假
按位与( & )对boolean类型数据 与运算 和 对二进制数相应位置 与运算
按位或( | )对boolean类型数据 或运算 和 对二进制数相应位置 或运算
取反( ! )对boolean类型的数据取反
按位取反( ~ )对数的二进制数每个位置取反
逻辑异或(^)a^b,a和b不同,则为真。可以对二进制数或boolean类型的数据进行异或

逻辑与 &&

a&&b,a和b都为真则为真

boolean a=true;
boolean b=true;
System.out.print(a && b);

逻辑或 ||

boolean a=false;
boolean b=false;
System.out.print(a && b);

按位与 &

计算 a&b

  • a和b都是数,即 按照a和b的二进制数,比较每个位置的数,都为1,则为1,有一个为0则为0(都为真,则真)

    比如,0 1 0 0 1 0 1 0

    ​ 1 0 1 1 0 1 1 1

    结果:0 0 0 0 0 0 1 0

  • a和b,都是都是boolean类型,在逻辑运算上和 逻辑与( &&) 是一样的

    但按位与(&)和逻辑与(&&)的区别在于 :

    按位与(&)逻辑运算时,第一个条件为false的时候,第二个条件任然会执行 ,而逻辑与(&&) 第一个条件为false,第二个条件不会执行

    int a=0;
    int b=0;
    if(a!=0 & ++b<1){
    System.out.println("啦啦啦");
    }
    System.out.println("a="+a+"\tb="+b);
    

    image-20230914212345352

    int a=0;
    int b=0;
    if(a!=0 && ++b<1){
    System.out.println("啦啦啦");
    }
    System.out.println("a="+a+"\tb="+b);
    

    image-20230914212607253

按位或 |

按位或的计算和按位与时差不多的

计算 a | b

  • a和b都是数,即 按照a和b的二进制数,比较每个位置的数,都为0,则为0,有一个为1则为1(都为假,才假)

    比如,0 0 0 0 1 0 1 0

    ​ 1 0 1 1 0 1 1 1

    结果:1 0 1 1 1 1 1 1

  • a和b,都是都是boolean类型,在逻辑运算上和 逻辑或( || ) 是一样的

    但按位或( | )和逻辑或( || )的区别在于 :

    按位或( | )逻辑运算时,第一个条件为true的时候,第二个条件任然会执行 ,

    而逻辑或( || ) 第一个条件为true,第二个条件不会执行

    int a=0;
    int b=0;
    if(a==0 | ++b<1){
    System.out.println("啦啦啦");
    }
    System.out.println("a="+a+"\tb="+b);
    

    image-20230914214034829

    int a=0;
    int b=0;
    if(a==0 || ++b<1){
    System.out.println("啦啦啦");
    }
    System.out.println("a="+a+"\tb="+b);
    

    image-20230914214055090

取反 !

! :对boolean类型的数据取反

注意: ! 只能对boolean类型的数据取反,不能对数取反

如,

boolean flag = true;
System.out.println(!flag);
boolean flag = 1<5;
System.out.println(!flag);

按位取反 ~

~:对数的二进制数的每个位置进行取反

  • 先来说明一下:在计算机中存储的信息均是已二进制形式保存的。且数字是以补码形式保存的,正数的补码和原码同,负数的补码为原码取反后加1

  • 对 1 按位取反

    1的二进制数: 0000 0001

    按位取反 1111 1110

    计算后得到 ~1 = -2

    System.out.println(~1);
    

    image-20230914220839355

逻辑异或

逻辑异或又称为异或

注意: ~ 只能对数按位取反,不能对boolean类型的数据取反

计算 a^b

  • 当a和b都为boolean类型数据,a和b不同则为真,其他都为假
System.out.println(false ^ true);

image-20230914221541979

  • 当a和b为数,对其二进制数的每个位置进行异或运算:不同为1,相同为0

    如, 0101 0011

    ​ 1100 1100

    结果: 1001 1111

  • 计算 0 ^ 1

    System.out.println(0 ^ 1);
    

    0000 0000

    0000 0001

    0000 0001

位置进行异或运算:不同为1,相同为0**

如, 0101 0011

​ 1100 1100

结果: 1001 1111

  • 计算 0 ^ 1

    System.out.println(0 ^ 1);
    

    0000 0000

    0000 0001

    0000 0001

    所以结果为 1

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值