博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言函数:用位运算交换的方法交换两个变量值
阅读量:5807 次
发布时间:2019-06-18

本文共 756 字,大约阅读时间需要 2 分钟。

hot3.png

void inplace_swap(int *x, int *y){    *y = *x ^ *y; //Step 1    *x = *x ^ *y; //Step 2    *y = *x ^ *y; //Step 3 }int main(){    int num1 = 100;    int num2 = 200;    inplace_swap(&num1, &num2);    printf("num1=%d\nnum2=%d\n", num1, num2);    return 0;}

    相比使用一个局部变量来交换两个变量的值,这种方法并没有性能上的优势,只是一种对位运算的练习。

    一个数与它本身异或,结果为0。假设*x = a;*y = b;

*x
*y
Step0
a
b
Step1
a
a ^ b
Step2 a ^ a ^ b ( = b)
a ^ b
Step3 b
a ^ b ^ b ( = a)

    不过,需要注意,*x与*y指向同一个位置时,*x与*y指向的数变为0

    例如将一个数组中的元素首尾对调的时,使用下面的函数

    void reverse_array(int a[], int cnt)    {        int first, last;        for (first = 0, last = cnt - 1; first <= last; first++, last--)        {            inplace_swap(&a[first], &a[last]);        }    }

    如果数组长度为奇数是,中间的数会变成0

转载于:https://my.oschina.net/u/1423325/blog/343238

你可能感兴趣的文章
12.22 repeater 添加
查看>>
leetcode-74-搜索二维矩阵
查看>>
Remote Desktop Issues
查看>>
IIS7内建账号,应用程序池
查看>>
之字形打印矩阵
查看>>
我的2014-相对奢侈的生活
查看>>
zoj 2412 dfs 求连通分量的个数
查看>>
NLP自然语言处理学习笔记一(环境准备)
查看>>
李开复:中国第四波创业浪潮来临
查看>>
dl以及dt,dd,以及table的tr,th,td最清楚分析
查看>>
js 数据类型问题
查看>>
STL学习小结
查看>>
【LeetCode】151. Reverse Words in a String
查看>>
ORACLE数据库常用查询二
查看>>
VMware-workstation-full-11.0.0-2305329&VMware-player-7.0.0-2305329
查看>>
careercup-C和C++ 13.10
查看>>
Hadoop集群(第10期)_MapReduce与MySQL交互
查看>>
使用Java高速实现进度条
查看>>
【转】inittab文件
查看>>
如何利用【百度地图API】,制作房产酒店地图?(上)——制作自定义标注和自定义信息窗口...
查看>>