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

位运算——交换两个数

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

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

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

晶振的等效电路(转载)

晶振的等效电路(转载)

http://blog.sina.com.cn/s/blog_a20257d80102w7y4.html 1 晶振的等效电气特性 (1) 概念 [1] 晶片,石英晶体或晶体、晶振、石英晶体谐振器 从一块石英晶体上按一定方位角切下薄片。 [2] 晶体振荡器 在封装内部添加IC组成振荡电路的晶...

MOS-N 场效应管 双向电平转换电路 -- 适用于低频信号电平转换的简单应用

MOS-N 场效应管 双向电平转换电路 -- 适用于低频信号电平转换的简单应用

如上图所示,是N沟道MOSFET双向电平转换电路。 双向传输原理: 为了方便讲述,定义 3.3V 为 A 端,5.0V 为 B 端。 A端输出低电平时(0V),MOS管导通,B端输出是低电平(0V); A端输出高电平时(3.3V),MOS管截至,B端输出是高电平(5V);...

STM8L PC0 PC1无法输出高电平

STM8L PC0 PC1无法输出高电平

MCU:STM8L151K4 参考代码: PC_DDR |= BIT1; PC_CR1 |= BIT1; PC_ODR |= BIT1; 现象: 无法输出高电平,一直是低电平 原因: STM8L PC0和PC1是N沟道开漏输出,所以必须接上拉电阻才能输出高电平。 以下截图来自于STM8L151...

Word删除空格、空行、超链接宏

1、删除空格和空行 此宏的主要功能是删除空格,并将软回车替换为硬回车 Sub 删除空格和空行() ' ' 删除空格和空行 宏 ' '    '英文单词与英文单词之间保留一个半角空格,其他的所有空格均删除     myReplaceExecute Se...

TVS主要技术参数

1、最小击穿电压VBR和击穿电流IR VBR:Reverse Break Down Voltage,反向击穿电压 IR:Reverse Current,击穿电流(有的datasheet上称为IT) VBR是TVS最小的击穿电压,在25℃时,低于这个电压TVS是不会产生雪崩的。当TVS流过规定的1mA...

IIS HTTP 500错误解决

操作系统:Windows XP SP3 IIS:6.0 IIS安装完成,一运行出现“HTTP 500 - 内部服务器错误”,网上找了一圈,处理方法那个叫复杂,在研究完复杂方法之后,发现只要三步就可以解决问题了: 1. 运行:regsvr32 %windir%/syste...

发表评论

访客

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