2 littlefishie littlefishie 于 2016.01.17 20:29 提问

C语言只使用2个变量实现交换两个int数字,方法越多越好,谢谢

C语言只使用2个变量实现交换两个int数字,方法越多越好,谢谢

9个回答

caozhy
caozhy   Ds   Rxr 2016.01.17 20:31
已采纳

int x = 1;
int y = 2;
x = x ^ y;
y = x ^y;
x = x ^ y;

qq_27183003
qq_27183003   Ds   Rxr 2016.01.17 20:45

int x=1;
int y=2;
x=x+y;
y=x-y;
x=x-y;

wangxugangzy05
wangxugangzy05   2016.01.17 22:50

我以为b=a+b-(a=b) 应该是结果为b = 原来的b 没有改变b。
但是我测试发现vs2010是这样的 没有改变的b, 但是gcc 就是a b互换啦。我觉得如下应该没有歧义吧:
b = (a+b)-(a=b);

enpterexpress
enpterexpress   2016.01.17 20:52
x=x+y;
y=x-y;
x=x-y;
Captain_MXD
Captain_MXD   2016.01.17 21:08

int a,b;
b=a+b-(a=b);

yamizZ
yamizZ   2016.01.18 15:46

int swap (x,y)
{
x=x+y;
y=x-y;
x=x-y;
}
拿去,不用谢

lijianhuilijie
lijianhuilijie 哦,写错了,x = x - y;与 x = x + y不考虑溢出?
接近 2 年之前 回复
lijianhuilijie
lijianhuilijie x = x + y; y = x - y;x = x - x;
接近 2 年之前 回复
lijianhuilijie
lijianhuilijie {}
接近 2 年之前 回复
lijianhuilijie
lijianhuilijie int swap(x,y)
接近 2 年之前 回复
zrj99
zrj99   2016.01.18 18:23

除了位操作外,其它几种好像都没有考虑溢出

yamizZ
yamizZ   2016.01.19 17:24

之前写的匆忙,我又重新写了下,这个我测试过了,肯定没问题,关于溢出,我只想说你是要写多大的数啊,32位系统下只要数不超过4294967295就不会有溢出问题图片说明

y1317222080
y1317222080   2016.01.17 20:49

int x=1
int y=x+1

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!