`
wooyon
  • 浏览: 22473 次
  • 性别: Icon_minigender_1
  • 来自: XT
社区版块
存档分类
最新评论

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

阅读更多

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

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

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

中语编程技巧

  • 描述: 中语编程技巧
  • 大小: 168.2 KB
分享到:
评论
1 楼 xiol 2014-03-15  
小白用户请教:
"第三种虽同时适用于整型和浮点型,却不适用于引用类型",
为什么不适用于引用类型

相关推荐

Global site tag (gtag.js) - Google Analytics