C语言 交换算法之加减法,及溢出防范

交换算法之加减法

前面的章节中介绍了C语言交换算法中的临时变量法,算是比较基础的一种方法,但是使用定义了一个临时的变量来临时存储参数(指针)指向的内存地址中存储的值,这就需要一个额外的内存空间。

这里介绍的加减法并不需要增加一个额外的内存空间,但是需要溢出防范,具体的可参考下方的示例代码。

加减法示例代码

cpp 复制代码
bool __builtin_add_overflow(type a, type b, type *res)

该函数是一些GCC和Clang编译器内置的函数,可以用于检测整数的加法是否会导致溢出。

cpp 复制代码
#include <stdio.h>
#include <limits.h>
void swapNumber(int *a, int *b) {
    if( a == b ) return;
    int sum;
    if(__builtin_add_overflow(*a, *b, &sum)){
        printf("整数溢出!\n");
        return;
    }
    *a = *a + *b;
    *b = *a - *b;
    *a = *a - *b;
}
int main() {
    int x = 255;
    int y = 166;
    
    swapNumber(&x, &y);
    printf("加减法置换数值之后: x = %d, y = %d\n", x, y);
    return 0;
}

代码编译运行,得到输出:

cpp 复制代码
加减法置换数值之后: x = 166, y = 255

全栈开发助手原文:C语言 交换算法之加减法,及溢出防范

免责声明:内容仅供参考!

相关推荐
学究天人1 分钟前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(卷3.2)
线性代数·算法·机器学习·数学建模·动态规划·抽象代数·拓扑学
tkevinjd19 分钟前
力扣322-零钱兑换
算法·leetcode·动态规划
byte轻骑兵19 分钟前
【AVRCP】规范精讲[41]:AV/C指令帧解析,蓝牙遥控交互的底层语言
c语言·开发语言·人机交互·智能制造·avrcp
大鱼>23 分钟前
AI+资产监控:农业设施智能监控系统
人工智能·深度学习·算法·机器学习
发光小北25 分钟前
Bronze100系列plc Modbus及自由口通信案例
开发语言·php
AI科技星30 分钟前
乖乖数学·全域超复数统一场论:五大核心门槛与全套标准定量数据
人工智能·python·算法·金融·全域数学
snow@li31 分钟前
Java:后端项目会有一个类似前端node_modules的目录吗 / jar包在本地仓库 ~/.m2/repository 中按版本共存
java·开发语言·前端
geovindu34 分钟前
java: Builder Pattern
java·开发语言·后端·设计模式·建造者模式·生成器模式
2zcode38 分钟前
免费开源项目文档:基于MATLAB同态滤波的医学图像增强系统设计与实现
开发语言·matlab
REDcker43 分钟前
Android 15 16KB 内存页适配详解
android·开发语言·python