JAVA_基础逻辑运算符与位运算符使用

逻辑运算符

  • &-----逻辑与 | ----- 逻辑或 ! ----- 逻辑非
  • &&-----短路与 || ----- 断路或 ^ ----- 逻辑异或
aba & ba && ba | ba || b!aa ^ b
truetruetruetruetruetruefalsefalse
truefalsefalsefalsetruetruefalsetrue
falsetruefalsefalsetruetruetruetrue
falsefalsefalsefalsefalsefalsetruefalse
  • 区分 &&&

    • 相同点1:&&& 的运算结果相同
    • 相同点2:当符号左边是true时,二者都会执行符号右边的运算
    • 不同点:当符号左边是false时,&继续执行符号右边的运算。而&&不再执行符号右边的
  • 区分 |||

    • 相同点1:||| 的结果相同
    • 形同点2:当符号左边是false时,二者都会执行后面的操作
    • 不同点:当符号左边时true时,|继续执行符号右边的运算,而 ||不在执行符号右边的操作

位运算符

位运算符操作的都是整型的数据。

位运算符是直接对整数的二进制进行计算。

运算符运算范例
<<左移3 << 2 = 12 ( 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
  • 注意:没有<<<无符号左移
位运算符的细节
<<空位补0,被移除的高位丢弃,空缺位补0。
>>被移位的二进制最高位是0,右移后,空缺位补0;最高位如果是1,则空缺位补1。
>>>被移位二进制最高位无论是0或者是1,空缺位都补0。
&二进制位进行&运算,只有1 & 1时结果是1,否则是0。
|二进制位进行|运算,只有0|0时结果是0,否则是1。
^相同二进制位进行^运算,结果是0;( 1 ^ 1 = 0, 0 ^ 0 = 0 )
不相同二进制位^运算结果是1。( 1 ^ 0 = 1, 0 ^ 1 = 1 )
~正数取反,各二进制码按补码各位取反
负数取反,各二进制码按补码各位取反

<< :在一定范围内,每项左移1位,相当于 * 2

>>: 在一定范围内,每项右移1位,相当于 / 2

public class BitTest {
    public static void main(String[] args) {
        int i = 21;
        int j = -21;
        System.out.println(" j << 2 = " + ( j << 2 ));  // -21 * 2 * 2 = -84
        System.out.println(" i << 2 = " + ( i << 2 ));  // 21 * 2 * 2 = 84
        System.out.println(" i << 3 = " + ( i << 3 ));  // 21 * 2 * 2 * 2 = 168

        System.out.println(" j >> 2 = " + ( j >> 2 ));  // -21 / 2 / 2 = -6
        System.out.println(" i >> 2 = " + ( i >> 2 ));  // 21 / 2 / 2 = 5
        System.out.println(" i >> 3 = " + ( i >> 3 ));  // 21 / 2 / 2 / 2 = 2

        int m = 12;
        int n = 5;
        System.out.println(" m & n = " + ( m & n ));    // 4
        System.out.println(" m | n = " + ( m | n ));    // 13
        System.out.println(" m ^ n = " + ( m ^ n ));    // 9
    }
}

数值之间的交换:

	   //  交换两个变量的值
        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);

        // 方法二:
        // 好处:不用定义临时变量
        // 弊端:①相加操作可能超出存储范围②有局限性:只针对数值类型
        int num3 = 10;
        int num4 = 20;
        num3 = num3 + num4; // num3 = 30;
        num4 = num3 - num4; // num4 = 10;
        num3 = num3 - num4; // num3 = 20;

        System.out.println(" num3 = " + num3 + " ,num4 = " + num4);

        // 方法三:实用位运算符
        // 好处:不用定义临时变量
        // 弊端:有局限性:只针对数值类型
        int num5 = 10;
        int num6 = 20;
        num5 = num5 ^ num6;
        num6 = num5 ^ num6;
        num5 = num5 ^ num6;
        System.out.println(" num5 = " + num5 + " ,num6 = " + num6);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值