您的位置:首页 > 编程语言

怎样不用临时变量而交换两个变量的值?——看一中文编程语言中的“完美”一例

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 查看)



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: