异或运算符

/*
    ^的特点:a 异或 b 两次得到的还是 a。
*/
class OperatorDemo{
    public static void main(String[] args) {
        int a = 10;
        int b = 20;

        System.out.println(a ^ b ^ b); //10
        System.out.println(a ^ b ^ a); //20
    }
}

那么不使用第三个变量,如何交换两个变量的值?

/*
    使用位异或运算实现。
*/
class Test{
    public static void main(String[] args) {
        int a = 10;
        int b = 20;

        a = a ^ b;    //现在 a = 10 ^ 20
        b = a ^ b;    //因为上面a被重新赋值了,所以 b = 10 ^ 20 ^ 20; b = 10;位异或运算的特点。
        a = a ^ b;    //再来看 a,a 还是上面重新赋值的状态,b的值已经发生变化了。
                          //所以 a = 10 ^ 20 ^ 10;a = 20
        System.out.println("a:"+a+",b:"+b);
    }
}
/*
    另外一种方案:使用相加减实现。
*/
class Test{
    public static void main(String[] args) {
        int a = 10;
        int b = 20;

        a = a + b;    //现在 a = 10 + 20
        b = a - b;    //因为上面a被重新赋值了,所以 b = 10 + 20 - 20; b = 10;
        a = a - b;    //再来看 a,a 还是上面重新赋值的状态,b的值已经发生变化了。
                          //所以 a = 10 + 20 - 10;a = 20
        System.out.println("a:"+a+",b:"+b);
    }
}

thanks~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值