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   Rxr 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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
用c语言编写两个数的交换,三种方法
下面是从函数角度,还有简单的交换 法去实现两个数的交换。其中函数用到指针,通过前两种方法可以深刻的体会到指针变得的含义。 #include void swap(int *a,int *b) {   int temp;     temp=*a;      *a=*b;     *b=temp; }  void main()  {     int x=2, y=5;    
C语言交换两个变量值不利用额外变量
1) 算术运算 就是通过+和-运算来实现。代码如下: int a,b; a=10;b=12; a=b-a; //a=2;b=12 b=b-a; //a=2;b=10 a=b+a; //a=12;b=10 2) 位运算 通过异或运算也能实现变量的交换,这也许是最为神奇的,请看以下代码: int a=10,b=12; //a=1010^b=1100; a=a^b; //a
C语言三种方法实现两个变量值的交换
一、利用一个临时变量来实现两个变量值的交换: #include int main() { int a = 10; int b = 11; int temp; temp = a; a = b; b = temp; printf("a=%d,b=%d\n", a, b); return 0; } 二、不用临时变量来实现两个变量值的交换
面试题:交换2个数字,要求高效快速.(可用三种方式实现交换2个数字)
交换2个数字一般有三种方式: 第一种是利用一个三方变量temp作为临时变量交换 第二种是利用a+b,a-a之类的方式交换(a+b可能会溢出) 第三种是利用异或运算方式告诉的交换数字 package java基础题目; /* * 问题:交换2个数字,要求高效 * 位异或运算:相同则0(0^0,1^1),不同则1(1^0,0^1) * 位或运算:如果2个位都是0则是0(0|0),其余情
C程序中交换两个变量数值,不使用第三方变量(四种方式)
在学习程序语言和进行程序设计的时候,交换两个变量的值是经常要使用的。通常我们的做法是(尤其在学习阶段):定义一个新的变量,借助它完成交换。代码如下: int a,b; a=10; b=15; int t; t=a; a=b; b=t; 这种算法易于理解,特别适合帮助初学者了解计算机程序的特点,是赋值语句的经典应用。在实际软件开发当中,此算法简单明了,不会产生歧义,便于程序员之间的交流,一
C语言交换两个变量数值的几种方法
因为经常见到这类题目,就自己总结了以下几种办法 1. 创建中间变量 这是最快也是最简单的办法,例如: #include<stdio.h> int main() { int a=10; int b=20; int temp; printf("交换前a,b的值为:\n"); printf("a=%d\n",a); prin...
【C语言】两个变量值的交换——指针
用子函数进行两个变量的值交换1.直接用两个变量进行传参,交换。在子函数内部进行打印。
不用临时的变量 交换两个数的两种方法
就地交换两个数是比较经典而且基础的算法之一。 我们要交换两个数字,通常的做法就创建一个中间变量,然后进行循环赋值,比如说下面的代码: void Switch(int* p1, int* p2) { int tmp = *p1; *p1 = *p2; *p2 = tmp; }这种做法是最常见的一种交换两个数字的方法,但研究算法的人总是会提出比较诡异的问题,比如
C语言基础—实现两个变量交换的三种方法
C语言程序执行中,当定义了变量后,就相当于在内存中开辟了一部分的存储空间,不同空间存储的内容各异。在实际应用中,常常需要交换不同存储空间的内容,即变量内容的交换。用不同的思路,都能实现两个变量的交换。下面简单地介绍了三种实现方法: /* 方法一 思路: 1定义一个中间变量temp; 2将变量x的值存储到temp中; 3将变量y的值存储到x中; 4将temp中的x的值存储到y中; 优点
异或运算实现两个数的交换
通常的交换两个变量a,b的过程为 int temp; temp=a a=b; b=temp; 需借助上面的第3个临时变量temp. 采用下面的方法,对于给定两个整数a,b,下面的异或运算可以实现a,b的交换,而无需借助第3个临时变量:     a = a ^ b;     b = a ^ b;     a = a ^ b;