不借助第三个变量交换a,b两个变量值
有一道面试题,要求是
不借助第三个变量交换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两个变量值相关推荐
- 不借助第三个变量交换两个整数
假设两个数x和y,则有: 方法1,算术运算(加减): x=x+y; //x暂存两数之和 y=x-y; //y为两数之和减去y,即原来的x x=x-y; //x为两数之和减去现在的y(原来的x), ...
- 实现两个变量的互换(不借助第三个变量)
一.问题简述 变量的互换常见于数组排序算法中,常见的做法是创建第三个变量进行互换,但是创建第三个变量仅作为过渡变量,这样不仅消耗系统内存,还使效率低下.这里提供一种不借助第三个变量的算法实现两个变量的 ...
- php 实现两变量值对换,PHP互换两个变量值的方法(不用第三变量)
前言 今天在这里我们就来看看,在PHP中如何在不使用第三变量的情况下,达到交换两个变量值得目的.详细的解说见代码注释,下面来一起看看吧. 一.substr() && strlen() ...
- php比较两个变量的值_总结PHP不用第三个变量交换两个变量的值的几种方法
"PHP不用第三个变量交换两个变量的值"这个题看到过好多次了,看来面试确实喜欢考这道题.今天,对于这个题目,我自己总结了几种方法,可能不全,大家来互相补充. 有些仅适用于字符串,方 ...
- 四种“不使用第三方变量就可以交换两个变量值”的方法
问题引入: 遇到交换变量值的问题,通常我们的做法是:定义一个新的变量,借助它完成交换. 代码如下: t = a; a = b; b = t; 在这里插入代码片 但问题的重点是"不使用第三方变 ...
- 用html5交换两个变量的值,JavaScript交换两个变量值的七种解决方案
前言 这篇文章总结了七种办法来交换a和b的变量值 var a = 123; var b = 456; 交换变量值方案一 最最最简单的办法就是使用一个临时变量了,不过使用临时变量的方法实在是太low了 ...
- c语言 交换两个变量 指针,C语言程序设计第5章“使用指针参数交换两个变量值”案例...
使用指针参数交换两个变量值"案例C主讲教师崔玲玲 5.1 " [案例说明]用函数实现两个变量值的交换使其在主调函数 和被调函数中的值一致.要求用指针变量作为函数参数.程 序运行结果 ...
- 通过位运算进行两个变量值的交换功能
通过位运算进行两个变量值的交换功能 一般交换方法 通常的交换两个变量a,b的过程为 int temp; temp=a a=b; b=temp; 需借助上面的第3个临时变量temp. 位运算交换方法 采 ...
- PHP怎样交换两个数输出,PHP交换两个变量值
方法一:交换两个变量的最简单方法是使用第三个临时变量<?php $a = 15; $b = 27; // 交换逻辑 echo " 交换前的数字为: "; echo " ...
最新文章
- Android 常用的地球经纬度转换公里(km)计算工具类
- 延迟放学,让“996父母”松了口气
- Mac 配置jupyter notebook 扩展 Nbextensions
- 金山云android连麦源代码,Android-SDK开发指南
- 三部曲打造无路由器破解闪讯WiFi共享 经好几个同学验证
- Android创建快捷方式-SHORTCUT
- 华为发布新一代CloudLink协作智真
- 爬去东方财富网龙虎榜(wechat:15353378609)
- pwn暑假训练(九) emem原来昨天是8今天是9
- KSO - sqlserver事务实现
- 冷月手撕408之操作系统(5)-进程概述
- 【汇正财经】大盘窄幅震荡,节前资金有避险情绪
- sublime text c语言开发环境插件集合
- 《物理光学》——光的衍射
- MATLAB-中文乱码问题解决
- SpringBoot练手项目总结
- Netty即是服务端又是客户端,服务端和客户端相互对应
- 6.xftp需要强制升级
- 手把手教你如何在Ubuntu22.04下驱动 EPSON系列打印机---以爱普生 EPSON L380为例
- Android快应用开发(一)
热门文章
- 让发展中国家展示清洁能源领导力
- Linux启动阶段Grub损坏修复
- 相濡以沫,不如相忘于江湖
- linux分屏桌面环境,Linux分屏操作screen[装逼神器]
- 焦作机器人编程比赛_2018 焦作icpc现场赛总结
- python爬携程景区评论_python爬取携程景点评论信息
- python后台研发工程师面试题_今日头条面试题之后台Python研发
- ubuntu使用certbot给nginx添加ssl证书
- 情感分析之PMI互信息
- 【牛客练习赛13】 A B C D【康拓展开】 E【DP or 记忆化搜索】 F 【思维】