关于两个变量不使用临时变量进行值交换
2014-08-30 19:51
295 查看
最近,由于工作需要重温了一下数据结构与算法分析。针对“两个变量不使用临时变量进行值交换”这个问题,进行了一定的分析与研究。
首先,需要确定的是这个问题的应用条件。
从数据类型的角度可以分为相同数据类型和不同数据类型变量的值交换。这里的数据类型不包括结构体,类,枚举及联合体等复合类型,应该局限在内部数据类型。
1. 对于相同数据类型的情况,我们希望如下情况:
Type1 a= Val1;
Type1 b= Val2;
swap(&a, &b);
在交换之后有:a = Val2,b = Val1。
2. 对于不同数据类型的情况,我们希望如下情况:
Type1 a= Val1;
Type2 b= Val2;
swap(&a, &b);
在交换之后有:a = (type1)Val2,b = (type2)Val1。
但对于不同数据类型又分为同字长和非同字长两种情况,显然非同字长的变量交换会出现数据截断的情况,交换也就变得毫无意义。同字长情况下,对于整型与非整型交换依然会存在数据截断的情况,即便是同字长整型又分为有符号和无符号,二进制数据是可以实现交换的,但会存在某个类型溢出的情况,使交换也变得无意义。
综上:这两个变量应该是相同的数据类型,否则进行值的交换就会变得毫无意义或者意义不大。
其次,解决这个问题的方法有两种。
1. 针对同类型的整型及浮点型数据都适用的为:
x = x + y;
y = x - y;
x = x - y;
2. 只对同类型的整型数据适用的为:
x = x ^ y;
y = x ^ y;
x = x ^ y;
综上,以上两种方法都不会因数据溢出产生错误。第二种方法由于异或运算“^”支持整型运算,所以不适用于浮点型,因为编译器会报错。第二种方法在数据结构的指针操作方面有着存储空间优势。
最后,这个问题的深入探讨坛子里有几个帖子大家可以去查阅,问题真正的解法可能有多种多样,本篇结论纯属一家之言,希望对大家有帮助,如果觉得满纸荒唐言,只当博君一笑尔!
首先,需要确定的是这个问题的应用条件。
从数据类型的角度可以分为相同数据类型和不同数据类型变量的值交换。这里的数据类型不包括结构体,类,枚举及联合体等复合类型,应该局限在内部数据类型。
1. 对于相同数据类型的情况,我们希望如下情况:
Type1 a= Val1;
Type1 b= Val2;
swap(&a, &b);
在交换之后有:a = Val2,b = Val1。
2. 对于不同数据类型的情况,我们希望如下情况:
Type1 a= Val1;
Type2 b= Val2;
swap(&a, &b);
在交换之后有:a = (type1)Val2,b = (type2)Val1。
但对于不同数据类型又分为同字长和非同字长两种情况,显然非同字长的变量交换会出现数据截断的情况,交换也就变得毫无意义。同字长情况下,对于整型与非整型交换依然会存在数据截断的情况,即便是同字长整型又分为有符号和无符号,二进制数据是可以实现交换的,但会存在某个类型溢出的情况,使交换也变得无意义。
综上:这两个变量应该是相同的数据类型,否则进行值的交换就会变得毫无意义或者意义不大。
其次,解决这个问题的方法有两种。
1. 针对同类型的整型及浮点型数据都适用的为:
x = x + y;
y = x - y;
x = x - y;
2. 只对同类型的整型数据适用的为:
x = x ^ y;
y = x ^ y;
x = x ^ y;
综上,以上两种方法都不会因数据溢出产生错误。第二种方法由于异或运算“^”支持整型运算,所以不适用于浮点型,因为编译器会报错。第二种方法在数据结构的指针操作方面有着存储空间优势。
最后,这个问题的深入探讨坛子里有几个帖子大家可以去查阅,问题真正的解法可能有多种多样,本篇结论纯属一家之言,希望对大家有帮助,如果觉得满纸荒唐言,只当博君一笑尔!
相关文章推荐
- 不使用临时变量交换两个整数
- [c语言笔记]关于指针操作中使用异或交换两个变量的值
- 不使用临时变量交换两个整数
- 1. 给定两个整形变量的值,将两个值的内容进行交换。 2. 不允许创建临时变量,交换两个数的内容(附加题) 3. 求10 个整数中最大值。 4. 写一个函数返回参数二进制中 1 的个数
- 使用位运算实现判断一个数是否是2的n次方,实现不需要中间变量进行两个变量值的交换
- 两个数字交换(不使用临时变量)
- 不使用临时变量 依次交换两个已知数组的值
- 让人泪奔的方法:两个变量在不使用其他变量的情况下进行数据交换
- 不使用临时变量交换两个无符号 正数a和b的值
- [置顶] 给定两个整形变量的值, 但是不允许建立临时文件将两个值得内容进行交换。
- 算法研究之不使用临时变量实现两个值的交换
- 不使用临时变量的情况下,两个变量之间交换值的问题
- 不使用临时变量交换两个变量的值
- 不使用临时变量,实现两个变量值的交换
- C中不使用临时变量交换两个变量的值(作者:yxin1322;blog:http://blog.csdn.net/yxin1322)
- 实现两个int变量的值的交换,要求不使用临时变量。
- 让人泪奔的方法:两个变量在不使用其他变量的情况下进行数据交换
- 不使用 临时变量交换两个变量的值(SWAP)【原理分析】
- 使用位运算交换两个值,不用临时变量
- 两个数字交换(不使用临时变量)