借助内置的c数据类型创建自己的my128int数据类型

时间:2015-02-20 15:26:23

标签: c

我想创建自己的数据类型,它可以保存从-2^1272^127-1的值,并希望对两个my128int数据类型变量执行添加。 我搜索stackoverflow社区并找到custom data type in C

上述讨论的主题需要执行哪些额外任务。

void addition(my128int a, my128int b)
{
    ....
    //perform some task
    // print the result a+b
}

1 个答案:

答案 0 :(得分:4)

对于整数数据类型,我不太关心您所引用问题的(未接受的)答案中提供的解决方案。

我自己,我会实现像你这样描述的类型:

typedef struct myint128_s {
    uint32_t bits[4];
} myint128;

添加将如下所示:

void myint128_add(myint128 *addend1, myint128 *addend2, myint128 *sum) {
    uint32_t carry = 0;
    int i;

    for (i = 0; i < 4; i += 1) {
        uint64_t temp = (uint64_t) addend1->bits[i]
                + (uint64_t) addend2->bits[i] + carry;
        sum->bits[i] = (uint32_t) temp;
        carry = (uint32_t) (temp >> 32);
    }

    /* can detect overflow here, if desired */
}

这假设/提供负数的二进制补码表示,与您为可表示数字指定的界限一致。然后,您不必特别注意符号位(位[3]的第63位)。

实际上,这是基数2 ^ 32中的数字表示。