不一样的数值交换

cpp 复制代码
#include <stdio.h>

void swap1(int& a, int& b)
{
    int temp = a; //使用局部变量 temp 完成交换
    a = b;
    b = temp;
};

这段代码是用临时变量+引用参数实现交换,是最稳妥的写法。但是

将数a、b的值进行交换,并且不使用任何中间变量。

无中间变量两种写法:

  1. 加减法(存在溢出风险)

void swap(int &a, int &b)

{

a = a + b;

b = a - b;

a = a - b;

}

  1. 异或法(推荐,无溢出,但a、b不能是同一个变量)

void swap(int &a, int &b)

{

a ^= b;

b ^= a;

a ^= b;

}

复制代码
int main(void)
{
	int a1 = 1, b1 = 2;
	int a2 = 3, b2 = 4;
	int a3 = 5, b3 = 6;
	int a = 2147483647, b = 1;

	swap1(a1,b1);	//测试使用临时变量进行交换的版本
	swap2(a2,b2);	//测试使用加减运算进行交换的版本
	swap3(a3,b3);	//测试使用异或运算进行交换的版本

	printf("after swap...\n");
	printf("a1 = %d, b1 = %d\n", a1, b1);
	printf("a2 = %d, b2 = %d\n", a2, b2);
	printf("a3 = %d, b3 = %d\n", a3, b3);

	swap2(a, b);
	printf("a = %d, b = %d\n", a, b);

	return 0;
}

总结:本例分别用临时变量、加减运算、异或运算三种方式实现数值交换。swap1 借助临时变量,逻辑直观安全;swap2 利用加减法,但存在整数溢出风险;swap3 依靠异或,无需额外变量,但不能处理相同地址变量。C 语言值传递特性下,直接传参无法修改主函数变量,需传入指针才能完成交换。

三种 swap 对比小结

  1. swap1(临时变量):最稳妥,无溢出、无同地址清零问题,工程首选
  2. swap2(加减):无额外变量,但有溢出 + 同地址清零风险,只适合确定相加不会越界场景
  3. swap3(异或):无溢出,但是同地址会清零,不能传入同一变量地址

swap3(异或):无溢出,但同地址会清零,需要加 if (x==y) 判断,给出优化后的 swap3函数

cpp 复制代码
#include <stdio.h>

void swap3(int *x, int *y)
{
    if (x == y)
    {
        return;
    }
    *x = *x ^ *y;
    *y = *x ^ *y;
    *x = *x ^ *y;
}

int main(void)
{
    int a3 = 5, b3 = 6;
    swap3(&a3, &b3);
    printf("a3=%d, b3=%d\n", a3, b3);

    int num = 100;
    swap3(&num, &num); // 传入相同地址,不会破坏数据
    printf("num=%d\n", num);
    return 0;
}
相关推荐
xxxiugou1236 小时前
链表算法题精讲:从两数相加到K组翻转
数据结构·c++·算法·链表
QY_Research_6 小时前
全球智能交通系统物联网市场规模及CAGR14.2%深度分析
大数据·网络·人工智能·物联网·制造
Zzj_tju6 小时前
32 分钟不是完成科研:多智能体读脑图谱,突破在哪里?
人工智能·机器学习·语言模型·自然语言处理
HAPPY酷6 小时前
C++ 自定义内存池优化点云处理:从裸指针到 RAII 自动回收
开发语言·c++
涛思数据(TDengine)6 小时前
直播预告 | 知识图谱,让文档自动变成知识网络
人工智能·ai·知识图谱·时序数据库·tdengine·工业ai
优利德6 小时前
优利德发布67GHz高性能矢量网络分析仪,为AI算力爆发助力
人工智能
软件工程师文艺6 小时前
AI 编程新范式:Spec Kit 的规格驱动开发到底在解决什么
人工智能·驱动开发
梦帮科技6 小时前
量子纠缠网络与量子隐形传态攻防:量子中继器信道串扰、纠缠态保真度降解与量子路由劫持
开发语言·网络·人工智能·算法·自动化·php
Z-D-K6 小时前
AI 安全:让能力、权限与责任同步增长
人工智能·安全
海宇服务6 小时前
零信任架构实战:基于海宇风控经营异常预警构建自动化央企物资采购供应商资信排查网关
运维·人工智能·架构·自动化