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

来源:互联网 发布:windows linux 拷 编辑:程序博客网 时间:2024/04/28 09:54

 

怎样不用临时变量而交换两个变量的值?有多少种方法?听我慢慢道来......

要交换两个变量的值,在高级语言中,通常使用的方法是通三个赋值语句来实现:

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

中语编程示例