| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1778 人关注过本帖
标题:交换两数的另类实现
只看楼主 加入收藏
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
结帖率:78.95%
收藏
 问题点数:0 回复次数:11 
交换两数的另类实现
程序代码:
#include <stdio.h>
#include <stdlib.h>
int main(void){
    int a = 1;
    int b = 2;
    //a=     00000001
    //b=     00000010
    //(a^=b)=00000011
    //(b^=a)=00000001
    //(a^=b)=00000010
    a ^= b;
    b ^= a;
    a ^= b;
    printf("a=%d b=%d\n", a,b);
    system("PAUSE");
    return 0;
}
搜索更多相关主题的帖子: 另类 
2008-11-13 01:04
hokers
Rank: 1
等 级:新手上路
威 望:1
帖 子:102
专家分:0
注 册:2008-11-9
收藏
得分:0 
让我想起拉ASM里面的XOR.
#include <stdio.h>
void main()
{
    int a = 1;
    int b = 2;
    b=a+b;
    a=b-a;
    b=b-a;
    printf("a=%d,b=%d\n",a,b);
    getchar();
}
2008-11-13 02:14
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 
确实够另类的

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-11-13 09:12
langzi_feng
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-11-13
收藏
得分:0 
这个..........如果数据再复杂一点就麻烦了
不实用啊

我是菜鸟,请见谅
2008-11-13 10:33
网易
Rank: 1
来 自:金星
等 级:禁止访问
帖 子:193
专家分:0
注 册:2008-6-10
收藏
得分:0 
[bo][un]langzi_feng[/un] 在 2008-11-13 10:33 的发言:[/bo]

这个..........如果数据再复杂一点就麻烦了
不实用啊

我是菜鸟,请见谅


看起来不菜啊 !

这个还不符合习惯思维呢

答案是:雨中飞燕!
2008-11-13 10:44
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
[bo][un]hokers[/un] 在 2008-11-13 02:14 的发言:[/bo]

让我想起拉ASM里面的XOR.
#include
void main()
{
    int a = 1;
    int b = 2;
    b=a+b;
    a=b-a;
    b=b-a;
    printf("a=%d,b=%d\n",a,b);
    getchar();
}


/images/2011/147787/2011051411021524.jpg" border="0" />
2008-11-13 11:11
dsr_dbh
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2008-10-29
收藏
得分:0 
如题。。
LZ的方法能用于所有的整数吗?包括有符号型的。。

[[it] 本帖最后由 dsr_dbh 于 2008-11-13 15:39 编辑 [/it]]
2008-11-13 11:13
woshiyun
Rank: 1
等 级:新手上路
威 望:2
帖 子:348
专家分:0
注 册:2008-6-16
收藏
得分:0 
---

[[it] 本帖最后由 woshiyun 于 2008-11-13 11:23 编辑 [/it]]
2008-11-13 11:21
woshiyun
Rank: 1
等 级:新手上路
威 望:2
帖 子:348
专家分:0
注 册:2008-6-16
收藏
得分:0 
#include <stdio.h>
void reverse(int* a, int size)
{
    int *begin,*end;
    for(begin=a,end=a+size-1;begin<=end;begin++,end--)
    {
        *begin ^= *end;
        *end   ^= *begin;
        *begin ^= *end;
    }
}
int main(void){
    int a[5]={1,2,3,4,5};
    reverse(a, 5);
    for(int i=0;i<5;i++)
    {
        printf("%d\t",a[i]);
    }
    printf("\n");
    return 0;
}

从我知道这个程序为什么结果错开始,我就不打算用这个数据交换方法了。
2008-11-13 11:29
hellson
Rank: 2
来 自:北京
等 级:新手上路
威 望:4
帖 子:195
专家分:0
注 册:2008-9-1
收藏
得分:0 
楼上的程序问题和上面讨论的没有任何关系啊
而且也很好改
程序代码:
       if(begin!=end)
        {
         *begin ^= *end;
         *end   ^= *begin;
         *begin ^= *end;
        }

春了夏了秋冬了,来了来了又来了
相信我的帖子打开都很快,看我头像就知道了
2008-11-13 13:13
快速回复:交换两数的另类实现
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038669 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved