黑马程序员技术交流社区

标题: 求异或运算符对数据进行交换的具体过程 [打印本页]

作者: 追逐    时间: 2014-3-4 10:46
标题: 求异或运算符对数据进行交换的具体过程
class FuZhi {
        public static void main(String[] args) {
                //定义两个int类型的整数
                int a = 3, b = 4;
                System.out.println("a = " + a + "b = " + b);
                //用异或运算符交换两个数????问问这个交换的具体流程
                a = a ^ b;
                b = a ^ b;
                a = a ^ b;
                System.out.println("a = " + a + "b = " + b);
        }
}
作者: ixiangfeng    时间: 2014-3-4 10:51
异或就是对两个数进行二进制操作,同一位上的两个数不一样则为1, 异或一个数两次得到的数是原来的数, 第二行的b就是a异或了两次b,得到原来的a,同理得到a就是原来的b
作者: 追逐    时间: 2014-3-4 11:02
ixiangfeng 发表于 2014-3-4 10:51
异或就是对两个数进行二进制操作,同一位上的两个数不一样则为1, 异或一个数两次得到的数是原来的数, 第 ...

谢谢了。我明白了
作者: 菠萝鱼    时间: 2014-3-4 11:04
异或是对二进制操作的,计算机先把a,b装换成二进制数,规则是,比较的位, 不同为1,相同为0。
举例:a是 00000011 b是00000100.
a^b=00000111;
00000111^b=00000011;
00000011^b=00000111;
作者: 菠萝鱼    时间: 2014-3-4 11:05
异或是对二进制操作的,计算机先把a,b装换成二进制数,规则是,比较的位, 不同为1,相同为0。
举例:a是 00000011 b是00000100.
a^b=00000111;
00000111^b=00000011;
00000011^b=00000111;
作者: Aimer_WJY    时间: 2014-3-4 11:14

class FuZhi {
        public static void main(String[] args) {
                //定义两个int类型的整数
                int a = 3, b = 4;
                System.out.println("a = " + a + "b = " + b);
                //用异或运算符交换两个数????问问这个交换的具体流程
                a = a ^ b;//a^b的值赋给a  011^100=111 (异或:相同为假,不同为真)
                System.out.println(a); //a=7
                b = a ^ b;//a^b的值赋给b  111^100=011
                System.out.println(b); //b=3
                a = a ^ b;//a^b的值赋给a  111^011=100  
                System.out.println(a); //a=4
                System.out.println("a = " + a + "b = " + b);
        }
}

作者: 何建明    时间: 2014-3-4 11:32
呵呵,死记的方法,记这个 结论 “异或一个数两次得到的数是原来的数 “
然后相互往表达式上套 ,就得结果了。。。
作者: 织语不如书    时间: 2014-3-4 15:38
你只要记得“a^b^b = a"就可以
作者: 行如止水    时间: 2014-3-4 19:00
这个视频上讲的很详细,你多翻看翻看就明白了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2