c - 该函数执行什么操作?

标签 c functional-programming ansi

int function(uint32_t *r, const uint32_t *a, const uint32_t *b, int n)
{
 int i;
 uint32_t ri, c=0;
 for (i = 0; i < n; i ++)
 {
   ri = a[i] + b[i] + c;
   c = ((ri < a[i]) || ((ri == a[i]) && c));
   r[i] = ri;
 }
   return ((int) c);
}

下面给出的 C 函数有四个参数:r、a 和 b 是指向数组的指针 uint32_t 类型。整数 n 指定这些数组的长度(即所有三个数组 包含相同数量的元素)。返回值是int类型。谁能帮我理解这个函数执行的操作?

最佳答案

它正在执行带进位传播的多精度加法。 ab 参数是指向多精度整数的指针,每个整数都有 n 位。在这种情况下,数字是 32 位。最低有效数字位于最低的数组索引中。

添加输入,并将结果放入r 指向的数组(也包含n 32 位数字)。它的工作原理是将 a 中的数字与 b 中的数字相加,并使用进位 c 初始化为零。当结果数字小于输入数字之一,或当进位为 1 时等于输入数字之一时,检测到进位。返回值是整个操作的进位。

假设我们要添加以 10 为基数的数字。如果我们计算 9+9+0 mod 10,我们得到 8。由于 8 小于 9,我们推断一定有进位。如果我们计算 9+9+1 模 10,我们得到 9;我们推断进位是因为进位已设置。如果我们计算 9+0+0,我们得到 9,但是没有进位,因为进位是 0。

关于c - 该函数执行什么操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22110641/

相关文章:

haskell - 这个函数是否利用了haskell的惰性求值

python - 在 Python 中验证 ctypes 类型精度

python-2.7 - Ansible Azure 模块

Ruby 相当于 lisp-like "apply"?

F# BinarySearch 返回位置

c - ANSI C 书籍链接列表章节中的错误编译示例

c - 如何用 Bison 解析 C 字符串

C 将结构中的嵌套结构传递给函数?

c - 从 C 文件输入,数据类型

C 中无符号长二维数组转换为无符号一维字符数组