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

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

相关推荐
月明长歌20 小时前
【码道初阶】【LeetCode 110】平衡二叉树:如何用一个“Magic Number”将复杂度从O(N²)降为 O(N)?
linux·算法·leetcode
yaoh.wang20 小时前
力扣(LeetCode) 14: 最长公共前缀 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
CreasyChan20 小时前
C#特性(Attributes)详解
开发语言·c#
历程里程碑20 小时前
C++ 9 stack_queue:数据结构的核心奥秘
java·开发语言·数据结构·c++·windows·笔记·算法
csbysj202020 小时前
JavaScript AI 编程助手
开发语言
t1987512820 小时前
基于MATLAB的线性判别分析(LDA)降维算法实现方案
开发语言·算法·matlab
weixin_4624462320 小时前
nodejs 下使用 Prettier 美化单个 JS 文件(完整教程)
开发语言·javascript·ecmascript
醇氧20 小时前
【Windows】从守护到终结:解析一个 Java 服务的优雅停止脚本
java·开发语言·windows
reasonsummer20 小时前
【办公类-18-07】20251215(Python)“口腔检查涂氟信息”批量生成打印(区名、学号、姓名、学校、班级、身份证、户籍、性别、民族)
开发语言·python
小鹿学程序20 小时前
FileZilla连接到虚拟机
java·服务器·开发语言