当前位置:首页 > 技术心得 > 正文内容

位运算——交换两个数

xjtudll5年前 (2022-02-13)技术心得7890

交换两个数
交换两个数相信很多人天天写过,我也相信你每次都会使用一个额外来变量来辅助交换,例如,我们要交换 x 与 y 值,传统代码如下
int tmp = x;
x = y;
y = tmp;
这样写有问题吗?没问题,通俗易懂,万一哪天有人要为难你,**不允许你使用额外的辅助变量来完成交换呢?**你还别说,有人面试确实被问过,这个时候,位运算大法就来了。代码如下:
x = x ^ y // (1)
y = x ^ y // (2)
x = x ^ y // (3)
解释如下:
把(1)中的 x 带入 (2)中的 x,有
y = x^y = (xy)y = x(yy) = x^0 = x。 x 的值成功赋给了 y。
对于(3),推导如下:
x = x^y = (xy)x = (xx)y = 0^y = y。

扫描二维码推送至手机访问。

版权声明:本文由鸟的天空发布,如需转载请注明出处。

本文链接:http://www.xjtudll.cn/Exp/633/

标签: CC#
分享给朋友:

“位运算——交换两个数” 的相关文章

C语言交换两个数

可能大家都认为交换两个数如此的简单,没必要写,没新意。例如,交换a和b两个数,教科书上一直这样写: temp=b; a=temp; b=a; 确实很简单。但是最近看到一段代码,觉得十分高超,是这样的: a^=b; b^=a; a^=b; 同样也是三句代码,但是却未...

固定电容标称容量及误差

电容器上标有的电容数是电容器的标称容量。电容器的标称容量和它的实际容量会有误差。常用固定电容允许误差的等级见表1。 表1 固定电容允许误差等级 误差 ±2%...

浅谈单片机程序设计中的“分层思想”

    网络转载,出处未知,收藏甚久。     分层的思想,并不是什么神秘的东西,事实上很多做项目的工程师本身自己也会在用。看了不少帖子都发现没有提及这个东西,然而分层结构确是很有用的东西,参透后会有一种恍然大悟的感觉。如果说我不懂LCD...

OKI单片机-如何查看编译后程序占用的RAM和ROM大小

OKI单片机-如何查看编译后程序占用的RAM和ROM大小

OKI单片机程序编译成功后,Project目录下将会多出一个map文件。通过这个文件,可以知道程序占用的RAM和ROM 1、程序占用ROM 分两种情况,第一种情况如下图: 像这种情况,占用ROM是: Total size(CODE) + Total size(TABLE) = 1916+95 =...

MySQL导入sql文件错误ERROR 1044 : Access denied for user ‘root’@'localhost’ to database ‘information_schema’

MySQL导入sql文件错误ERROR 1044 : Access denied for user ‘root’@'localhost’ to database ‘information_schema’

参考资料: http://www.linuxidc.com/Linux/2014-03/97586.htm http://stackoverflow.com/questions/4824986/error-1044-access-denied-for-user-rootlocalhost-to-da...

检测NSWindow关闭

You can declare your custom class to conform to NSWindowDelegate protocol. Set an instance of your custom class to be the delegate of your wind...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。