我想创建自己的数据类型,它可以保存从-2^127
到2^127-1
的值,并希望对两个my128int
数据类型变量执行添加。
我搜索stackoverflow社区并找到custom data type in C
上述讨论的主题需要执行哪些额外任务。
void addition(my128int a, my128int b)
{
....
//perform some task
// print the result a+b
}
答案 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中的数字表示。