关于数值交换的几种方法
2016-10-19 10:55
204 查看
在大量的开发中常常会遇到需要交换两个数值的问题,今天就给大家分享一些数值交换方面的方法:
第一种方法:
这也是大家最容易想到的方法,即利用中间变量达到交换两个数的目的,具体如下:
int tmp;
tmp = i1;
i1 = i2;
i2 = tmp;
这种方法执行效率是最低了
第二种方法:
利用数学中的运算技巧:
i1 = i1 + i2;
i2 = i1 - i2;
i1 = i1 - i2;
这样也可以实现两个数的交换
第三种方法:
则是利用位运算中的异或来实现数据交换
i1 = i1 ^ i2;
i2 = i1 ^ i2;
i1 = i1 ^ i2;
这种方式的执行效率相对来说比较高。
源代码如下:
#include <stdio.h>
void swap1(int i1,int i2)
{
int tmp;
tmp = i1;
i1 = i2;
i2 = tmp;
}
void swap2(int i1,int i2)
{
i1 = i1 + i2;
i2 = i1 - i2;
i1 = i1 - i2;
}
void swap3(int i1,int i2)
{
i1 = i1 ^ i2;
i2 = i1 ^ i2;
i1 = i1 ^ i2;
}
int main(void)
{
int i,j;
i = 3;
j = 5;
swap1(i,j);
printf("i = %d,j = %d\n",i,j);
i = 6;
j = 8;
swap1(i,j);
printf("i = %d,j = %d\n",i,j);
i = 2;
j = 7;
swap1(i,j);
printf("i = %d,j = %d\n",i,j);
return 0;
}
执行结果:
第一种方法:
这也是大家最容易想到的方法,即利用中间变量达到交换两个数的目的,具体如下:
int tmp;
tmp = i1;
i1 = i2;
i2 = tmp;
这种方法执行效率是最低了
第二种方法:
利用数学中的运算技巧:
i1 = i1 + i2;
i2 = i1 - i2;
i1 = i1 - i2;
这样也可以实现两个数的交换
第三种方法:
则是利用位运算中的异或来实现数据交换
i1 = i1 ^ i2;
i2 = i1 ^ i2;
i1 = i1 ^ i2;
这种方式的执行效率相对来说比较高。
源代码如下:
#include <stdio.h>
void swap1(int i1,int i2)
{
int tmp;
tmp = i1;
i1 = i2;
i2 = tmp;
}
void swap2(int i1,int i2)
{
i1 = i1 + i2;
i2 = i1 - i2;
i1 = i1 - i2;
}
void swap3(int i1,int i2)
{
i1 = i1 ^ i2;
i2 = i1 ^ i2;
i1 = i1 ^ i2;
}
int main(void)
{
int i,j;
i = 3;
j = 5;
swap1(i,j);
printf("i = %d,j = %d\n",i,j);
i = 6;
j = 8;
swap1(i,j);
printf("i = %d,j = %d\n",i,j);
i = 2;
j = 7;
swap1(i,j);
printf("i = %d,j = %d\n",i,j);
return 0;
}
执行结果:
相关文章推荐
- <实例>C++中交换两数值的几种方法
- Java 中 数值交换的几种方法
- 关于利用异或操作来交换两个数值的方法
- 关于两个变量交换的几种方法。
- C++中两个数值交换的几种方法
- C语言交换两个变量数值的几种方法
- 交换数值的几种方法比较(a,b互换)
- 交换两个数值的几种方法
- 关于linux 网络配置的几种方法
- 关于U盘无法弹出的几种解决方法
- 关于清除Windows系统桌面图片蓝底的几种方法
- 关于文章标题截取规定字数几种方法:(c#)
- WWF中宿主程序(即调用工作流的程序)和工作流内部交换数据的几种方法(情况)。
- 笔试面试题二:Java中交换两个变量的值,你能想到几种方法?
- 关于主机远程唤醒(WOL,Wake on Lan)的几种方法
- 关于数据库中重复的记录 的几种取出方法
- 关于‘吃’的几种英语表达方法
- 关于execel导入数据库的几种方法
- 关于VC获取当前程序运行路径的几种方法
- 关于入侵检测系统常用的几种检测方法