首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 如何实现1条语句交换两个数 [已结帖,结帖人:cymandhxl]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cymandhxl
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-11-08 12:43:08 楼主
    以前在这里看过,好像是

    a=3,b=2;
    类似于这样一个语句。利用寄存器原理。
    a=(b=(a+b))*0-b;

    现在实在想不起来了。请大家帮忙看看。

    不是b^=a^=b^=a这类的东西。只是一条语句。

    谢谢大家。
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • glacier3d
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 12:44:171楼 得分:5
    a=a+b,b=a-b,a=a-b;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yzfyzyl
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 12:46:572楼 得分:5
    std::swap(a, b)



    飞燕算法群:46520219
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • baihacker
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 4

    发表于:2008-11-08 12:50:583楼 得分:5
    C/C++ code
    x ^= y ; y ^= x ; x ^= y ; x = x+y ; y = x-y ; x = x-y ; x = x-y ; y = y+x ; x = y-x ; x = y-x ; y = y-x ; x = x+y ;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zmlovelx
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 12:52:414楼 得分:50
    C/C++ code
    int main() { int p = 1; int q = 2; p = p + q - (q = p); cout << p << " " << q; return 0; }

    2 1
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • baihacker
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 4

    发表于:2008-11-08 12:53:215楼 得分:5
    C/C++ code
    short x = 2, y = 3; *(int*)&y = *(int*)&y >> 16 | *(int*)&y << 16; cout << x << y << endl;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zapdos
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 13:03:406楼 得分:5
    Java code
    int main(){ int i=3; int j=4; cout << i << "," << j <<endl; i^= j^= i^= j; cout << i << "," << j <<endl; }


    就是运算符优先级问题了吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zapdos
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 13:04:407楼 得分:5
    不好意思,回帖不看贴..
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mzlogin
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 13:05:548楼 得分:5
    p = p + q - (q = p);

    4楼正解。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qdk0901
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 13:07:529楼 得分:5
    _asm xchg a,b
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lzr4304061988012
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 13:09:4410楼 得分:5
    引用 4 楼 zmlovelx 的回复:
    C/C++ code
    int main()
    {
        int p = 1;
        int q = 2;
      p = p + q - (q = p);
      cout < < p < < " " < < q;
      return 0;
    }


    2 1

    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hello_shadow
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 13:18:1611楼 得分:5
    为什么要有一条语句?这样在软件开发中有用吗?别人也不好看懂。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xuxingok
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 13:18:3712楼 得分:0
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xxgamexx
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 14:31:4313楼 得分:0
    C/C++ code
    p = p + q - (q = p);

    顶起~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lucky_06
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 14:33:1214楼 得分:0
    引用 4 楼 zmlovelx 的回复:
    C/C++ code
    int main()
    {
        int p = 1;
        int q = 2;
      p = p + q - (q = p);
      cout < < p < < " " < < q;
      return 0;
    }


    2 1


    我这里输出的是 1 1
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • arong1234
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 14:34:1015楼 得分:0
    现在的语言学习怎么都陷入这种无聊的“技巧”中?这样的技术即使研究透彻了,如果用了也是对软件的一个非常大的损坏,不用则是耽误时间
    引用楼主 cymandhxl 的帖子:
    以前在这里看过,好像是

    a=3,b=2;
    类似于这样一个语句。利用寄存器原理。
    a=(b=(a+b))*0-b;

    现在实在想不起来了。请大家帮忙看看。

    不是b^=a^=b^=a这类的东西。只是一条语句。

    谢谢大家。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jiju8484
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 14:56:3116楼 得分:0
    引用 2 楼 yzfyzyl 的回复:
    std::swap(a, b)


    飞燕算法群:46520219

    en
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fhtingtian
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 15:00:5717楼 得分:0
    引用 3 楼 baihacker 的回复:
    C/C++ codex ^= y ; y ^= x ; x ^= y ;
    x = x+y ; y = x-y ; x = x-y ;
    x = x-y ; y = y+x ; x = y-x ;
    x = y-x ; y = y-x ; x = x+y ;

    很强大
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dreamer_shax
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 16:10:3918楼 得分:0
    引用 17 楼 fhtingtian 的回复:
    引用 3 楼 baihacker 的回复:
    C/C++ codex ^= y ; y ^= x ; x ^= y ;
    x = x+y ; y = x-y ; x = x-y ;
    x = x-y ; y = y+x ; x = y-x ;
    x = y-x ; y = y-x ; x = x+y ;

    很强大



    这个不行,可能会有溢出,还不如用异或呢
    p = p + q - (q = p);
    这个还是第一次看到,牛

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Lnnu_lc
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 21:50:3019楼 得分:0
    牛人还挺多的呢,好,涨见识了哦
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • aidingbao1019
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 23:13:2220楼 得分:0
    引用 4 楼 zmlovelx 的回复:
    C/C++ codeintmain()
    {intp=1;intq=2;
      p=p+q-(q=p);
      cout < <p < <"" < <q;return0;
    }
    2 1

    给偶像挑点刺,呵呵
    先执行
    C/C++ code
    (q=p)

    此时,q==p==1;
    然后再接着p+q,等同于p+p==2,最后p+q-(q=p),那么等同于p+p-p==p==1;
    VS2008下测试结果为:1,1
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hqin6
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-09 00:44:5921楼 得分:0
    引用 4 楼 zmlovelx 的回复:
    C/C++ code
    int main()
    {
        int p = 1;
        int q = 2;
      p = p + q - (q = p);
      cout < < p < < " " < < q;
      return 0;
    }


    2 1


    依赖于编译器!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • phisherr
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-09 03:45:4122楼 得分:0
    引用 3 楼 baihacker 的回复:
    C/C++ codex ^= y ; y ^= x ; x ^= y ;
    x = x+y ; y = x-y ; x = x-y ;
    x = x-y ; y = y+x ; x = y-x ;
    x = y-x ; y = y-x ; x = x+y ;

    hehe
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved