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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

例如:a=10,b=15,怎么把a,b的值互换?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

14 个回复

倒序浏览
a=a+b;
b=a-b;
a=a-b;
Console.WriteLine("交换后值为a:{0},b:{1}",a,b);

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
可以通过普通的+和-运算来实现:
imt a,b;
a=10;b=15;
a=b-a;//a=5,b=15
b=b-a;//a=5,b=10
a=b+a;//a=15,b=10

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 刘俊红 于 2012-10-7 10:55 编辑

也可用位运算中对的「异或^」,好处是相比+-不会溢出,但是只能用在整型和bool型上,引用类型之类统统不行。
  1. using System;

  2. namespace 交换2
  3. {
  4.     class Program
  5.     {
  6.         static void Main(string[] args)
  7.         {
  8.             int a = 10;
  9.             int b = 15;

  10.             a = a ^ b;
  11.             b = b ^ a;
  12.             a = a ^ b;

  13.             Console.WriteLine("{0}   {1}",a,b);
  14.         }
  15.     }
  16. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
何学强 发表于 2012-10-6 21:07
可以通过普通的+和-运算来实现:
imt a,b;
a=10;b=15;

能不能说得明白点,a=b-a?前一个a和后一个a的值分别是多少呢?为什么?其实我也查了答案的,但是还是有点想不过来。。。
回复 使用道具 举报
这个哦。呵呵
.a=1,b=2,不用第三个变量,a,b互换?
我记得测试题里面有的哦

1.
a=a+b
b=a-b
a=a-b

2.
a=a^b
b=b^a
a=a^b
原理就不说了直接上代码了

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 神马王刚 于 2012-10-6 21:54 编辑

其实仔细想想就明白了.
第一步,把2个变量的和赋给第1个变量,那么这时候两个变量分别存的值就是  和 \  第2个变量的值
第二步,用和减去第2个变量,得到的值是原来第一个变量的值,而我们却把这个值赋给第2个变量,这样两个变量分别存储的值就是和\交换后第2个变量的值
第三部,因为交换后两变量和不变,因此用和减去新得到的变量2的值,就得到了新的变量1的值.这时候就相当于完成交换,两变量的值对调了.

关键就在于,你要把=当作赋值运算的符号,不能看作==等于,把它右边的式子当作一个整体,就好理解,不然就可能会迷糊

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
int a=10;
int b=15;
a=a+b;-----把a+b的值赋给a,那么a的值现在为25了
b=a-b;-----把a-b的值赋给b,b的值就为25-15=10了
a=a-b;-----把a-b的值赋给a,注意,这时候a的值为25,b的值为10,最后赋给a的值就是25-10=15;
实现了交换。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
蔡嘉 中级黑马 2012-10-8 21:33:21
9#
a=a+b  -->  a=25
b=a-b  -->  b=10
a=a-b  -->  a=15          -->实现互换
位运算不太会,原理是二进制数的计算,异或(相同为0,不同为1)
10的二进制:00001010  -->a
15的二进制:00001111  -->b
a=a^b=00000101  -->5
b=b^a=00001010  -->10
a=a^b=00001111  -->15
用异或莫名其妙就交换了!不知是谁想出来的?为什么这样就能交换呢?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
用a+b的我就不说了主要说说异或吧
分别将a和b换算成二进制,即
00001010
00001111
--------------
00000101
然后将00000101转成十进制5赋给a;下面的同理

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
a = b + (b = a) * 0;

ok了

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
             int number1 = 5, number2 = 10;
            number1 = number1 + number2;   //将两个变量的值相加赋给number1
            number2 = number1 - number2;   //将两个数的差5赋给number2
            number1 = number1 - number2;   //将两个数的差10赋给number1
            Console.WriteLine("number1的值是:" + number1);
            Console.WriteLine("number2的值是:" + number2);
            Console.ReadKey();

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
servant4335 发表于 2012-10-9 15:09
a = b + (b = a) * 0;

ok了

这个算法好强悍,之前没想到过
回复 使用道具 举报
潘梦军 发表于 2012-10-10 09:11
这个算法好强悍,之前没想到过

这个主要是正常的不会在一个表达式里写两个等号
只要知道等号在c#中是赋值不是等于的意思就很好理解了
:)
回复 使用道具 举报
int a=10;
int b=15;
a=a+b;
b=a-b;
a=a-b;-----注意,此时a的值为25,b的值为10,实现了不依靠第三个变量进行交换。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马