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类型。谁能帮我理解这个函数执行的操作?
最佳答案
它正在执行带进位传播的多精度加法。 a
和 b
参数是指向多精度整数的指针,每个整数都有 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/