C语言初阶小练习4(不用临时变量交换数值)

devtools/2024/10/23 6:56:34/

题目:不能创建临时变量(第三个变量),实现两个整数的交换


1.用临时变量来实现(常规写法)

这种方法是最直观的,但题目要求不使用临时变量,所以这里仅作为对比参考。

用创建临时变量来写:逻辑清晰,更便于理解,也是在正常情况下的书写方法。

int main()
{//创建临时变量int a = 3;int b = 5;printf("%d %d\n", a, b);int tmp = a;//临时变量tmpa = b;b = tmp;printf("%d %d\n", a, b);return 0;
}

2.不创建临时变量的写法

2.1第一种写法:

通过加减运算的方法,在整数范围足够大(不溢出)的情况下可以工作。

注意:如果ab的和超出了int的范围,这种方法会导致溢出,从而无法正确交换值

int main()
{int a = 3;int b = 5;printf("%d %d\n", a, b);a = a + b;b = a - b;a = a - b;//当a和b分别不溢出的时候,但是和溢出的时候,不合适printf("%d %d\n", a, b);
}

2.2第二种写法:

用^(异或操作符)来实现目的

利用了异或运算(XOR)的特性来交换两个整数的值,且不涉及任何溢出问题。

int main()
{int a = 3;int b = 5;printf("%d %d\n", a, b);a = a ^ b;b = a ^ b;//(a^b)^b=aa = a ^ b;//(a^b)^a=b	//当a和b分别不溢出的时候,但是和溢出的时候,不合适printf("%d %d\n", a, b);return 0;
}

1.a = a ^ b;:此时a存储了a和b的异或结果。


2.b = a ^ b;由于a现在是a XOR b,所以b = (a XOR b) XOR b。根据异或运算的性质,x XOR x = 0和x XOR 0 = x,所以b变成了原来的a。


3.a = a ^ b;:此时b已经是原来的a,所以a = (a XOR b) XOR a。由于b是原来的a,所以a变成了原来的b


http://www.ppmy.cn/devtools/128094.html

相关文章

【付费】Ambari集成Dolphin实战-002-bigtop下编译dolphin——下

3.2 编译过程记录 3.2.1 do-component-build 执行 17:28:50.944 [ERROR] [system.err] + STATUS=0 17:28:50.944 [ERROR] [system

某ai gpt的bug

某ai gpt的bug 背景 遇到了一个奇怪的现象: 输入内容 2024-10-21 10:09:31,052 ERROR o.a.j.t.JMeterThread: Test failed! java.lang.IllegalArgumentException:输出结果

Python实现基于WebSocket的stomp协议调试助手工具分享

stomp协议很简单,但是搜遍网络竟没找到一款合适的客户端工具。大多数提供的都是客户端库的使用。可能是太简单了吧!可是即便这样,假如有一可视化的工具,将方便的对stomp协议进行抓包调试。网上类似MQTT的客户端工具有很多&#xf…

sentinel原理源码分析系列(四)-ContextEntry

启动和初始化完成后,调用者调用受保护资源,触发sentinel的机制,首先构建或获取Context和获取Entry,然后进入插槽链,决定调用是否通过,怎样通过 上图展示构建Context和获取Entry的类互动图 获取或构建Conte…

Linux——数据链路层

目录 前言 理解网络转发 一以太网 1认识以太网 2以太网帧格式 3认识MAC地址 4MAC 地址和 IP 地址 5理解局域网通信 二ARP协议 1原因 2格式 3ARP过程 ​编辑 4ARP欺骗 三NAT技术 1NAT背景 2NAT IP转化过程 3NAPT 4内网穿透 5内网打洞 四代理服务器 …

导出问题处理

问题描述 测试出来一个问题,使用地市的角色,导出数据然后超过了20w的数据,提示报错,我还以为是偶然的问题,然后是发现是普遍的问题,本地环境复现了,然后是,这个功能是三套角色&…

windows启动qtcreator,任务管理器有,但是界面和任务栏不显示解决方案

原因 某次启动QtCreator,发现界面不显示,点击任务管理器,看到该进程已经在工作了。 解决方案 删除C:\Users\xxx\AppData\Romaing\QtProject里面的所有QtCreator.ini文件;重新启动QtCreator即可。 有时候可能会与安装有道词典冲突&#x…

QSlider和QProgressBar进度条控件

QProgressBar支持自定义样式,以满足不同应用程序的需求。用户可以设置进度条的颜色、文本格式等,以提升用户体验。通过样式表(StyleSheet),用户可以轻松地修改QProgressBar的外观。 简易小游戏 QTimer *timer;int val…