没有“temp”的swap
来源:互联网 发布:网络电话机终端 编辑:程序博客网 时间:2024/04/30 17:15
在这里只是记下在看书时留意到的一个有趣的小程序
刚入门学习写代码时,写一个用来交换两个数的程序swap是很常见的例子,而一般这个代码程序是这么写的(用c++语言来实现)
void swap(int *a, int *b){ int temp; temp = *a; *a = *b; *b = temp;}这个程序是一个很自然的想法。把a放到一个临时变量里去,然后把b赋值给a,然后再把临时变量,即原本的a赋值给b。于是完成了两个数之间的交换。
在这里,不知道有没人想过,能不能不引用第三个变量,即不用temp,只有a和b就完成整个swap过程呢?
呵呵,今天看的例子就是这么实现的。他通过引用布尔操作,对变量的位进行操作来实现。C++代码如下:
void swap(int *a, int *b){ *a = *a ^ *b; *b = *a ^ *b; *a = *a ^ *b;}其实在上面整个函数里,就用到了 ^ (异或)操作来实现两个数之间的交换。
b = (a ^ b) ^ b = a ^ (b ^ b) = a ^ 0 = a;
a = (a ^ b) ^ ((a ^ b) ^ b) = (a ^ b) ^ a = (a ^ a) ^ b = b;
于是,通过对位进行操作,整个swap操作就没有引用其他临时变量而完成。
不过,这种方法相对于前者并没有什么性能上的优越,it is merely an intellectual amusement....
- 没有“temp”的swap
- 安装oracle9i出现/temp/orainstall目录下没有足够的磁盘空间问题
- IIS页面报错“NT AUTHORITY\NETWORK SERVICE 没有访问temp目录的足够权限”
- MediaPlayer 的DEMO(temp)
- Dim Temp%的意思
- temp
- temp
- temp
- temp
- temp
- temp
- temp
- temp
- TEMP
- temp
- temp
- Temp
- temp
- mysql 基础 double write
- Windows消息大全
- synchronize java
- WM_COMMAND
- Essential C++学习笔记------第五章
- 没有“temp”的swap
- mysql 基础 -mysqld_safe 启动执行流程
- ES3和ES5中函数调用(function call) 的浏览器实现差异.
- POJ-2226-Muddy Fields
- UVA465-溢出
- WM_NCCALCSIZE
- 字符设备 register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()
- LoadMenuIndirect
- synchronized java 详解2