怎样不用临时变量而交换两个变量的值?有多少种方法?听我慢慢道来......
要交换两个变量的值,在高级语言中,通常使用的方法是通三个赋值语句来实现:
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 查看)