[8]位异或运算符的特点

作者: xahy 分类: 笔记 发布时间: 2019-07-17 20:39
/*
    ^的特点:一个int整型数据对另一个(同一个)整型数据位异或两次,该数本身不变。
*/
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);
    }
}

 

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注