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

位运算——交换两个数

xjtudll4年前 (2022-02-13)技术心得5180

交换两个数
交换两个数相信很多人天天写过,我也相信你每次都会使用一个额外来变量来辅助交换,例如,我们要交换 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#
分享给朋友:

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

Android error:Duplicate ID, tag null, or parent id with another fragment(fragment嵌套问题)

参考资料:http://stackoverflow.com/questions/14083950/duplicate-id-tag-null-or-parent-id-with-another-fragment-for-com-google-androi 跟参考资料里的这个人一样,我也碰到了这个...

office每次打开word都要配置进度 解决

office每次打开word都要配置进度 解决

Office2013每次打开都提示要配置,如图所示: 当然等待一段时间后,文件还是能打开的。 这个很烦。 解决方法: 1、点击“开始”——点击“运行”——输入“regedit”回...

金蝶K/3BOS取得字段值改变之前的原值

通过GetFieldValue函数只能取得字段改变后的值,但是有时候需要在字段值改变后,取得之前的原值。以下为具体代码: Dim dct As KFO.Dictionary = m.GetDataFldbyKey('FDecimal7', Row) Dim sdOld As Doubl...

浅析电波表——发射和接收原理

浅析电波表——发射和接收原理

一、发射的基本原理 授时信号的发射部分由原子钟、时间信号处理器、调制器、载波振荡器、激励级、强放级和发射天线组成。其工作原理是:原子钟作为时钟源,产生相对准确和稳定的时频标准,这个频率标准通过系统分频器得到实时的标准时间信息。如:年、月、日、时、分、秒、毫秒、微妙等时间信息,这些时间信息通过时间信息...

Android 修改preferences summary 文字的颜色

参考资料: http://stackoverflow.com/questions/4081946/android-preferences-summary-default-color 需求: preferences summary的文字颜色通常是跟随系统的,例如黑色或白色,现需要根据不同情况改变su...

Xcode:failed to get the task for process XXX 解决办法

问题:     iOS真机调试程序,报如下错误信息:failed to get the task for process XXX 原因: 证书问题,project和target的证书都必须是开发证书,不能用分发证书。 解决方案:     p...

发表评论

访客

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