A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 新手123 中级黑马   /  2014-7-15 22:45  /  1094 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class    Demo
{
        public static void main(String[] args)
        {
                int a=1,b=2;
                a=a^b;
                b=a^b;
                a=a^b;
                System.out.println("a="+a+",b="+b);
        }
}
//结果是 a=2,b=1
我没没明白  
                         int a=1,b=2;
                a=a^b;   1=1^2
                b=a^b;   1=1^2^2   b就等于1了
                a=a^b;   a=1^1^1   ........迷惑 b都已经等于1了  值已经改变了  a 是怎么=2的呢

12 个回复

倒序浏览
赵顺超 来自手机 中级黑马 2014-7-15 22:54:34
沙发
异或运算符是用符号“^”表示的,其运算规律是:
两个操作数的位中,相同则结果为0,不同则结果为1。
回复 使用道具 举报
^是位运算的或。

a和b都是int型,由于位运算是按二进制运算的,所以将a和b转换为二进制。
a=00000000-00000000-00000000-00000001
b=00000000-00000000-00000000-00000010
第一步:a=a^b=00000000-00000000-00000000-00000000-00000011=3;
第二步(简写):b=a^b=11^10=01=1;
第三步(简写):a=a^b=11^01=10=2

所以a=2,b=1

我说的明白么?
回复 使用道具 举报
    int a=1,b=2;
    a=a^b;   a=1^2
    b=a^b;   b=1^2^2   b就等于1了
    a=a^b;   a=(1^2)^ 1  
是这样吧,a=1^2
回复 使用道具 举报
赵顺超 来自手机 中级黑马 2014-7-15 22:58:34
报纸
a的二进制,1,补齐两位01,b的二进制10,那么,a异或b就等于11,十进制就是3。第二个,就是11异或10,结果01。第三个就是11异或01,就是10,就是2。所以a最后十进制是2,b是1
回复 使用道具 举报
a=a^b;
b=(a^)^b=a=1;现在的b=a=1;了
a=(a^b)^((a^b)^b)=(a^b)^a=b=2,这里是原来的b,所以是2
回复 使用道具 举报
回复 使用道具 举报
进制转换我明白  但是  按照  同一个数异或俩次还等与这个数的道理我还是不明白
  就是
       int a=1,b=2;
                a=a^b;   1=1^2
           这就里的     b=a^b;   《1=1^2^2》   b就等于1了 !!!~~~~~~~~~~~~~  
       这句意思不就是         a=a^b;   a=1^1^1吗????根本就没有2了  
回复 使用道具 举报
刘小印 发表于 2014-7-15 23:02
a=a^b;
b=(a^)^b=a=1;现在的b=a=1;了
a=(a^b)^((a^b)^b)=(a^b)^a=b=2,这里是原来的b,所以是2

b 怎么能是原来的2 呢  这是 Java的规定?、
回复 使用道具 举报
hjfeng1987 发表于 2014-7-15 22:55
int a=1,b=2;
    a=a^b;   a=1^2
    b=a^b;   b=1^2^2   b就等于1了


    int a=1,b=2;
    a=a^b;   a=1^2
    b=a^b;   b=1^2^2   b就等于1了   您想想   b=1
    a=a^b;   a=(1^2)^ 1  这里那里来的2啊   a=a^b 的  b 不是1吗
是这样吧,a=1^2
回复 使用道具 举报
新手123 发表于 2014-7-15 23:30
int a=1,b=2;
    a=a^b;   a=1^2
    b=a^b;   b=1^2^2   b就等于1了   您想想   b=1

int a=1,b=2;
    a=a^b;   a=1^2  
    b=a^b;   b=1^2^2   b就等于1了   您想想   b=1
    a=a^b;   a=(1^2)^ 1  这里那里来的2啊   a=a^b 的  b 不是1吗
第一步a=a^b,a这时候已经赋值为1^2啊, b的值变成1000都好,跟a无关啊

就好比
int a=1,b=2;
a=a+b;   1+2
b=4,
a会变成 1+4吗?


回复 使用道具 举报
hjfeng1987 发表于 2014-7-15 23:40
int a=1,b=2;
    a=a^b;   a=1^2  
    b=a^b;   b=1^2^2   b就等于1了   您想想   b=1

:lol不知道我理解得对不对,我也在学习,一起努力啊
回复 使用道具 举报
icris 中级黑马 2014-7-15 23:52:18
13#
  1. int a=1,b=2; // 省略前28位0…
  2. a=a^b; // a = 0001 ^ 0010 = 0011
  3. b=a^b; // b = 0011 ^ 0010 = 0001
  4. a=a^b; // a = 0011 ^ 0001 = 0010
  5. System.out.println("a="+a+",b="+b); // a = 0010 = 2, b = 0001 = 1
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马