📜  在C C++中将两个数字相加的8种不同方法(1)

📅  最后修改于: 2023-12-03 15:37:34.349000             🧑  作者: Mango

在 C/C++ 中将两个数字相加的 8 种不同方法

在编程过程中,实现两个数字相加是非常常见的操作。下面我们将介绍在 C/C++ 中将两个数字相加的 8 种不同方法。

注:以下代码均为 C++ 代码。

1. 常规方法
int a = 1;
int b = 2;
int result = a + b;

这是实现两个数字相加最常规的方法,直接使用加号(+)运算符实现。

2. 对于大型数字或精度高的数字,使用 STL 的高精度运算类

C++ 的 STL (Standard Template Library) 提供了高精度运算类,如 boost::multiprecision 库,可以用于处理大型数字或者需要高精度计算的数字。

#include <boost/multiprecision/cpp_int.hpp>
using boost::multiprecision::cpp_int;

cpp_int a = 1000000000000;
cpp_int b = 999999999;
cpp_int result = a + b;
3. 使用位运算(位运算速度比加减乘除等运算更快)

可以将数拆解成二进制数,再进行运算。

int a = 11;
int b = 8;
int result = a ^ b;
int carry = (a & b) << 1;
while (carry != 0) {
    int temp = result;
    result = result ^ carry;
    carry = (temp & carry) << 1;
}
4. 使用指针运算
int a = 10;
int b = 20;
int* p = &a;
int* q = &b;
int result = *p + *q;
5. 取模运算
int a = 10;
int b = 30;
int result = (a + b) % (a * b);
6. 在函数内部使用 static 声明变量
int add(int a, int b) {
    static int cnt = 0;
    ++cnt;
    return a + b;
}

int main() {
    int result = add(1, 2);
    return 0;
}
7. 递归实现(不适用于大数字)
int add(int a, int b) {
    if (b == 0) {
        return a;
    }
    int sum = a ^ b;
    int carry = (a & b) << 1;
    return add(sum, carry);
}
8. ASM inline assembly(使用汇编内嵌)

这是一种使用汇编语言实现的方法,它可以更加灵活的操作计算机的硬件资源,但是使用起来也更加困难。

int add(int a, int b) {
    int result;
    asm("addl %1, %0" : "=r"(result) : "r"(a), "0"(b));
    return result;
}