有一道面试题,要求是

不借助第三个变量交换a,b两个变量值。

其有一种解法是通过 “ 异或 ” 达成目的,代码如下

#include<stdio.h>int main()
{int a = 3;int b = 5;a = a ^ b;b = a ^ b;a = a ^ b;printf("a = %d, b = %d", a, b);return 0;
}

以下是我关于这段代码的简单理解:

首先了解一个词 “ 异或 ” ,它的意思是“ 相异为1, 相同为0 ”

C语言中所有数据都是二进制存储,所以“ 异或 :^ ”也是按二进制每位来比较

例如:

我们可以把两个数看成两堵墙(假设为char类型):

可以看出这两面墙有两块位置的“ 砖 ”不一样

因为有两块砖不一样,所以我们再分别拿出两块砖,就比如101,因为它和011的最高两位不同,所以拿这两块砖向不同的位置仍去,想象一下,如果原来位置已经有“ 砖 ”,再扔过去的话两块砖相撞,都碎了,它们变成了 0 ,而如果原来位置没有“ 砖 ”,我一扔过去,它就站在那了,于是变成了1,从此 101 变成了 011 。

同理,扔向 011 ,它就变成了 101。

这时理解以上代码是否就好理解多了?

================================结束=================================

以上是个人浅薄的理解,有错的话欢迎指出,有用的话,欢迎点赞~~

不借助第三个变量交换a,b两个变量值相关推荐

  1. 不借助第三个变量交换两个整数

    假设两个数x和y,则有: 方法1,算术运算(加减): x=x+y;  //x暂存两数之和 y=x-y;  //y为两数之和减去y,即原来的x x=x-y;  //x为两数之和减去现在的y(原来的x), ...

  2. 实现两个变量的互换(不借助第三个变量)

    一.问题简述 变量的互换常见于数组排序算法中,常见的做法是创建第三个变量进行互换,但是创建第三个变量仅作为过渡变量,这样不仅消耗系统内存,还使效率低下.这里提供一种不借助第三个变量的算法实现两个变量的 ...

  3. php 实现两变量值对换,PHP互换两个变量值的方法(不用第三变量)

    前言 今天在这里我们就来看看,在PHP中如何在不使用第三变量的情况下,达到交换两个变量值得目的.详细的解说见代码注释,下面来一起看看吧. 一.substr() && strlen() ...

  4. php比较两个变量的值_总结PHP不用第三个变量交换两个变量的值的几种方法

    "PHP不用第三个变量交换两个变量的值"这个题看到过好多次了,看来面试确实喜欢考这道题.今天,对于这个题目,我自己总结了几种方法,可能不全,大家来互相补充. 有些仅适用于字符串,方 ...

  5. 四种“不使用第三方变量就可以交换两个变量值”的方法

    问题引入: 遇到交换变量值的问题,通常我们的做法是:定义一个新的变量,借助它完成交换. 代码如下: t = a; a = b; b = t; 在这里插入代码片 但问题的重点是"不使用第三方变 ...

  6. 用html5交换两个变量的值,JavaScript交换两个变量值的七种解决方案

    前言 这篇文章总结了七种办法来交换a和b的变量值 var a = 123; var b = 456; 交换变量值方案一 最最最简单的办法就是使用一个临时变量了,不过使用临时变量的方法实在是太low了 ...

  7. c语言 交换两个变量 指针,C语言程序设计第5章“使用指针参数交换两个变量值”案例...

    使用指针参数交换两个变量值"案例C主讲教师崔玲玲 5.1 " [案例说明]用函数实现两个变量值的交换使其在主调函数 和被调函数中的值一致.要求用指针变量作为函数参数.程 序运行结果 ...

  8. 通过位运算进行两个变量值的交换功能

    通过位运算进行两个变量值的交换功能 一般交换方法 通常的交换两个变量a,b的过程为 int temp; temp=a a=b; b=temp; 需借助上面的第3个临时变量temp. 位运算交换方法 采 ...

  9. PHP怎样交换两个数输出,PHP交换两个变量值

    方法一:交换两个变量的最简单方法是使用第三个临时变量<?php $a = 15; $b = 27; // 交换逻辑 echo " 交换前的数字为: "; echo " ...

最新文章

  1. Android 常用的地球经纬度转换公里(km)计算工具类
  2. 延迟放学,让“996父母”松了口气
  3. Mac 配置jupyter notebook 扩展 Nbextensions
  4. 金山云android连麦源代码,Android-SDK开发指南
  5. 三部曲打造无路由器破解闪讯WiFi共享 经好几个同学验证
  6. Android创建快捷方式-SHORTCUT
  7. 华为发布新一代CloudLink协作智真
  8. 爬去东方财富网龙虎榜(wechat:15353378609)
  9. pwn暑假训练(九) emem原来昨天是8今天是9
  10. KSO - sqlserver事务实现
  11. 冷月手撕408之操作系统(5)-进程概述
  12. 【汇正财经】大盘窄幅震荡,节前资金有避险情绪
  13. sublime text c语言开发环境插件集合
  14. 《物理光学》——光的衍射
  15. MATLAB-中文乱码问题解决
  16. SpringBoot练手项目总结
  17. Netty即是服务端又是客户端,服务端和客户端相互对应
  18. 6.xftp需要强制升级
  19. 手把手教你如何在Ubuntu22.04下驱动 EPSON系列打印机---以爱普生 EPSON L380为例
  20. Android快应用开发(一)

热门文章

  1. 让发展中国家展示清洁能源领导力
  2. Linux启动阶段Grub损坏修复
  3. 相濡以沫,不如相忘于江湖
  4. linux分屏桌面环境,Linux分屏操作screen[装逼神器]
  5. 焦作机器人编程比赛_2018 焦作icpc现场赛总结
  6. python爬携程景区评论_python爬取携程景点评论信息
  7. python后台研发工程师面试题_今日头条面试题之后台Python研发
  8. ubuntu使用certbot给nginx添加ssl证书
  9. 情感分析之PMI互信息
  10. 【牛客练习赛13】 A B C D【康拓展开】 E【DP or 记忆化搜索】 F 【思维】