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

位运算——交换两个数

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

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

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

多字节乘法--汇编实现原理

       乘法的本质是加法,乘法是加法的简便运算。但是如果纯粹用加法,加的次数太多,例如,358*24,即使用358作加法,也要24次。多字节乘法与珠算的“空盘前乘法”类似,是手工算法的变种。   &n...

OKI单片机——ML610Q4XX 看门狗

OKI单片机——ML610Q4XX 看门狗

/***********************************************/ * @brief 看门狗初始化 * @details * @param[in] Time :看门狗复位时间 /********************************************...

UltraEdit复制粘贴十六进制(二进制)

UltraEdit复制粘贴十六进制(二进制)

问题: 用UltraEdit打开文件,看其十六进制,需要将十六进制数据复制出来并粘贴到记事本。但是直接复制(或Ctrl+C),无法粘贴到记事本。 原因: 复制到剪贴板的是二进制码流,而不是文本,所以无法贴到只能处理文本的记事本里。 解决办法: 选中要复制的区域,右键--->【十六进制复制所选视...

将rdlc报表作为资源嵌套使用

将rdlc报表作为资源嵌套使用

参考资料: 2. 如何将嵌入的资源读取出来,作为报表查看器控件的来源呢? 也就是说,我们可以通过LocalReport的一个特殊属性(ReportEmbeddedResource)来很方便地实现该需求 实际上路径一般默认是类名+文件夹名 我的程序包名是XonixERP.View,然后又有三层文...

Proteus 7.6 SP4破解1.1+汉化包

下载地址:http://ishare.iask.sina.com.cn/f/6751561.html 说明: 使用方法 复制到安装文件夹 \Proteus 7 Professional\下运行。 中文系统可用, 不用改区域语言设置。 不要安装其他破解 更新历史 1.1(2010.02....

MEMS微电子机械系统

文章来源:http://www.memschina.com MEMS(Micro Electromechanical System,即微电子机械系统)是指集微型传感器、执行器以及信号处理和控制电路、接口电路、通信和电源于一体的微型机电系统。概括起来,MEMS具有以下几个基本特点,微型化、智能化、多...

发表评论

访客

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