怎样不用临时变量而交换两个变量的值?——看一中文编程语言中的“完美”一例
来源:互联网 发布: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 查看)
- 怎样不用临时变量而交换两个变量的值?——看一中文编程语言中的“完美”一例
- 怎样不用临时变量而交换两个值?
- 怎样不用临时变量而交换两个值?
- 交换两个值,而不用临时变量
- 交换两个变量而不用临时变量
- 从“交换两个变量而不用临时变量”谈起
- 从“交换两个变量而不用临时变量”谈起
- 不用临时变量交换两个变量的值——函数对象
- C++ 不用临时变量交换两个变量的值——函数对象
- 不用临时变量交换两个变量的值
- 不用临时变量,交换两个变量的值
- 不用临时变量交换两个变量的值
- 不用临时变量交换两个变量的值
- 交换两个整数值,不用临时变量
- 不用临时变量交换两个数的值
- 不用临时变量交换两个数的值
- 不用临时变量交换两个数的值(C实现)
- 不用临时变量交换两个数的值
- Vlan知识之五:IEEE802.1Q与ISL
- 根据声音判断电脑故障(BIOS 提示音汇总) [转帖]
- UI-界面制作体会
- jsp+java分页出现错误
- C# 2.0 操作注册表
- 怎样不用临时变量而交换两个变量的值?——看一中文编程语言中的“完美”一例
- NET企业级应用架构设计系列
- IE7无法正常访问FTP的解决办法
- (转)利用Jakarta Commons组件beanutils、dbutils简化JDBC数据库操作
- MVC 示例代码
- 经典java转码程序,有备无患!实现和 jdk/bin/native2ascii.exe 同样的功能
- 使用VS2005方式创建安装包的一个问题
- Server Push详解
- CSS:样式表引入@import与link的不同--2008.04.23