怎样不用临时变量而交换两个变量的值?——看一中文编程语言中的“完美”一例
2008-04-23 11:35
316 查看
怎样不用临时变量而交换两个变量的值?有多少种方法?听我慢慢道来......
要交换两个变量的值,在高级语言中,通常使用的方法是通三个赋值语句来实现:
t = a; a = b; b = t; //t为临时变量
而在“汇编年代”,为节省资源, 程序员会通过以下方法实现
a ^= b; b ^= a; a ^= b;
妙吧,你还能想到其它方法吗? 没错,看下面
a=a+b; b=a-b; a=a-b;
在各种计算机语言中,前一种方法是通用的,而后两种方法则会受到类型限制,很明显异或(^)运算只适用于整型,第三种虽同时适用于整型和浮点型,却不适用于引用类型;
有完美解决方法吗?答案在http://hi.baidu.com/liugaotian/blog/item/bd0bae3e0d63d13870cf6ce8.html哈,广告完毕,继续......
在中语(暂以此名指代本计算机语言)中,你可以通过连续赋值语句完成
a, b = b, a;
理论上,它相对前几种方法更高效(简明自不必提了:),此外它具有第一种方法的通用性特点,故而堪称完美。
附中语实现源代码:(交换变量.yesi)
公有 元 示例 {
公有 共享(字串[] 起始参数列表){
中整 a=1, b=2;
printf("变量a/t变量b /n");
printf("------------ 0> t= a; a = b; b = t;/n");
t=a ; a=b; b=t;
printf(" %s/t %s/n", a, b);
printf("------------ 1> a ^= b; b ^= a; a ^= b;/n");
a^= b; b ^= a; a ^= b;
printf(" %s/t %s/n", a, b);
printf("------------ 2> a=a+b; b=a-b; a=a-b;/n");
a=a+b; b=a-b; a=a-b;
printf(" %s/t %s/n", a, b);
printf("------------ 3> a ,b = b , a;/n");
a ,b = b , a;
printf(" %s/t %s/n", a, b);
}
共享 中整 t;
私有 共享 空型 printf(字串 格式, 对象[] 参数列表 ...){
System.out.printf(格式,参数列表);
}
}
相关图片(看不到时,点击看原图或到http://hi.baidu.com/liugaotian 查看)
相关文章推荐
- 怎样不用临时变量而交换两个值?
- 怎样不用临时变量而交换两个值?
- 交换两个值,而不用临时变量
- 使用位运算交换两个值,不用临时变量
- 不用临时变量交换两个变量的值
- 不用临时变量实现两个变量交换
- 交换两个元素的值,不用临时变量
- 不用临时变量交换两个单精度浮点数的值
- 从“交换两个变量而不用临时变量”谈起
- 从“交换两个变量而不用临时变量”谈起
- 交换两个值,不用临时变量
- 用异或运算符实现不用第三个临时变量交换两个变量的值
- 不用临时变量,交换两个变量的值
- (1.1.2)C的|、||、&、&&、异或、~、!运算 (交换两个值,不用临时变量)
- 不用临时变量交换两个变量的值
- 不用临时变量,交换两个数。
- 常见面试题,交换两个整形变量不用中间变量怎样实现?
- 不用临时变量,交换两个变量的值
- 交换两个变量而不用临时变量
- 交换两个数,不用临时变量