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

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

相关推荐
橘子汽水1682 分钟前
Leetcode 128,49最长连续序列,字母异位词分组
java·算法·leetcode
mmmmath_35 分钟前
LeetCode.438.找到字符串中所有字母异位词
数据结构·算法·leetcode
qq_570398577 分钟前
Three.js基础使用-案例
开发语言·javascript·ecmascript
Nil2089 分钟前
leetcode 22括号生成
算法·leetcode·深度优先
Suxing913 分钟前
C语言基础分享:C语言文件操作:从“写日记”到“拍电影”的存盘指南
c语言·开发语言
Navigator_Z14 分钟前
LeetCode //C - 1237. Find Positive Integer Solution for a Given Equation
c语言·算法·leetcode
右耳朵猫AI16 分钟前
Node.js周刊2026W36 | NestJS 12发布、Remix 3 RC、pnpm 12 Rust重写、Node.js 26.8.0
开发语言·rust·node.js
统计学小王子34 分钟前
数学建模国赛倒计时 2 天 ——《异常值的处理(R语言)》
开发语言·数学建模·r语言
z落落3 小时前
C# WinForm Socket 转串口设备服务器+Modbus CRC16校验+Socket 客户端
服务器·开发语言·c#
春风解人意9 小时前
从零开始学习嵌入式P32----网络基础之TCP
c语言·网络·学习·tcp/ip