当前位置: 首页 > article >正文

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

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


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

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

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

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

    int tmp = a;//临时变量tmp
    a = 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=a
	a = 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.kler.cn/news/361230.html

相关文章:

  • 软件质量管理体系,软件评审资料,资质认证资料,安全建设,数据安全及项目管理全套资料(原件参考)
  • 搭建微信AI机器人
  • 《吉林大学学报(理学版)》
  • 演示:基于WPF的DrawingVisual开发的高刷新率示波器
  • 达梦数据库DEXP/DIMP逻辑备份还原
  • 【Linux】为什么环境变量具有全局性?共享?写时拷贝优化?
  • Ubuntu(22.04)本地部署Appsmith
  • Flink Taskmanager 内存模型详解
  • 大数据新视界 --大数据大厂之大数据与区块链双链驱动:构建可信数据生态
  • Android EditText调起键盘,阻止Recyclerview调整大小方法
  • 【Python】Playwright:环境配置与自动生成代码
  • 一、rpm命令,二、yum命令
  • 力扣——用栈实现队列(C语言)
  • CryoEM - 冷冻电镜 基于深度学习的 从头重构(Ab-initio Reconstruction) 开源项目 教程
  • Redis 哨兵与集群:高可用与可扩展的解决方案
  • 2.3 朴素贝叶斯(基础分类)
  • C语言数据结构之双向链表(LIST)的实现
  • 独立构件风格
  • 二分图染色法
  • 帝国CMS – AutoTitlePic 自动生成文章标题图片插件
  • Centos7 安装 Openssl 和 Nginx
  • 微分方程(Blanchard Differential Equations 4th)中文版Exercise 1.4
  • postgresql14主从同步流复制搭建
  • 跨域问题和前端攻击
  • 【开源免费】基于SpringBoot+Vue.JS母婴商城系统 (JAVA毕业设计)
  • 【Flutter】基础组件:Container