C语言异或操作的妙用

C语言异或操作的妙用如果想要交换 2 个变量 一般的做法是引入第三个变量 nbsp 例如 nbsp cpp nbsp viewplaincop nbsp nbsp a nbsp nbsp a nbsp nbsp b nbsp nbsp b nbsp temp nbsp nbsp nbsp 这样 2 个变量中的值就实现了交换 那能不能不引入其他变量就可以实现变量值的交换呢 答案是肯定的 用异或操作可以实现 有 2 种实现方法 本质上是一样的 法 1 nbsp cpp nbsp vi

如果想要交换2个变量,一般的做法是引入第三个变量,

 

例如,

 

[cpp] 
view plain copy

  1. temp a;  
  2. b;  
  3. b= temp;  

 

这样2个变量中的值就实现了交换。那能不能不引入其他变量就可以实现变量值的交换呢?答案是肯定的。

用异或操作可以实现,有2种实现方法,本质上是一样的。

法1:

 

[cpp] 
view plain copy

  1. #include   
  2. int main()  
  3.  
  4.     int a,b;  
  5.     while(1)  
  6.      
  7.         scanf(“%d %d”,&a,&b);  
  8.         a^b;          //(1)  
  9.         a^b;          //(2)  
  10.         a^b;          //(3)  
  11.         printf(“%d %d\n”,a,b);  
  12.      
  13.     return 0;  
  14.  

 

法2:

 

[cpp] 
view plain copy

  1. #include   
  2. int main()  
  3.  
  4.     int a,b;  
  5.     while(1)  
  6.      
  7.         scanf(“%d %d”,&a,&b);  
  8.         a^b;        //(1)  
  9.         a^b;        //(2)  
  10.         a^b;        //(3)  
  11.         printf(“%d %d\n”,a,b);  
  12.      
  13.     return 0;  
  14.  

 

因为2种方法本质一样,就方法一进行一下证明。

异或操作满足结合律和交换律,且由异或操作的性质知道,对于任意一个整数a^a=0;

证:(第(2)步中的a) a = a^b = (将第(1)步中的b代入b) a^(a^b) = b;

(第(3)步中的b)b = a^b = (将第(1)步中的b代入b,将第(2)步中的a代入a) a^b^a^a^b = a^a^a^b^b = a;

证毕




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221830.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午5:11
下一篇 2026年3月17日 下午5:12


相关推荐

  • 睿智的目标检测20——利用mAP计算目标检测精确度「建议收藏」

    睿智的目标检测20——利用mAP计算目标检测精确度「建议收藏」睿智的目标检测20——利用mAP计算目标检测精确度学习前言GITHUB代码下载知识储备1、IOU的概念2、TPTNFPFN的概念3、precision(精确度)和recall(召回率)4、概念举例5、单个指标的局限性什么是AP绘制mAP学习前言好多人都想算一下目标检测的精确度,mAP的概念虽然不好理解,但是理解了就很懂。GITHUB代码下载这个是用来绘制mAP曲线的。https:…

    2022年10月13日
    4
  • 外挂基础_开挂的正确姿势

    外挂基础_开挂的正确姿势一、前言  所谓游戏外挂,其实是一种游戏外辅程序,它可以协助玩家自动产生游戏动作、修改游戏网络数据包以及修改游戏内存数据等,以实现玩家用最少的时间和金钱去完成功力升级和过关斩将。虽然,现在对游戏外挂程序的“合法”身份众说纷纭,在这里我不想对此发表任何个人意见,让时间去

    2022年10月8日
    4
  • GetDlgItem的用法

    GetDlgItem的用法CLabel cLabelStateA MAX SUPPORT PORT NUM CLabel cLabelTipsAr MAX SUPPORT PORT NUM CEdit cEditNameArr MAX SUPPORT DATA NUM CEdit cEditCrcArra MAX SUPPORT DATA NUM CButton cButtonCKArr MAX SUPPORT DATA NUM 初始化控件 cLabelStateA

    2026年3月16日
    2
  • pycharm2022.01.13激活码CSDN-激活码分享

    (pycharm2022.01.13激活码CSDN)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月31日
    69
  • webzip怎么用 如何用webzip下载整个网站?

    webzip怎么用 如何用webzip下载整个网站?

    2021年9月21日
    51
  • sql mysql创建 视图索引_SQLServer中在视图上使用索引(转载)「建议收藏」

    sql mysql创建 视图索引_SQLServer中在视图上使用索引(转载)「建议收藏」在SQLServer中,视图是一个保存的T-SQL查询。视图定义由SQLServer保存,以便它能够用作一个虚拟表来简化查询,并给基表增加另一层安全。但是,它并不占用数据库的任何空间。实际上,在你查询它之前,视图并不做任何事情。索引视图在SQLServer2000和2005中,你能够给视图增加索引。但是,如果视图只是一个保存在数据库中的查询定义,在运行前没有自己的数据,你如何给那个定义建立…

    2022年7月22日
    19

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号