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语言 交换算法之加减法,及溢出防范

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

相关推荐
爱编程的鱼3 分钟前
想学编程作为今后的工作技能,学哪种语言适用性更强?
开发语言·算法·c#·bug
yugi9878384 分钟前
基于MATLAB的心电信号去噪
开发语言·matlab
代码雕刻家9 分钟前
1.6.课设实验-数据结构-栈、队列-银行叫号系统2.0
c语言·数据结构
国服第二切图仔18 分钟前
Rust入门开发之Rust中如何实现面向对象编程
开发语言·后端·rust
yq146828609020 分钟前
C (统计二进制中“1“的个数)
c语言·开发语言·算法
被AI抢饭碗的人27 分钟前
算法题(254):灾后重建
算法·leetcode·职场和发展
mm-q291522272931 分钟前
Java并发编程从入门到进阶 多场景实战
java·开发语言
深度学习机器35 分钟前
RAG的另一种思路,基于文档树结构的推理型检索
人工智能·算法·架构
深度学习机器43 分钟前
Agent架构新方向?Claude Skills工作原理解析
人工智能·算法·架构
nice_lcj5201 小时前
认识多线程:单例模式
java·开发语言·单例模式