#include <stdio.h>
#include <stdlib.h>
#define MAX_INT_LENGTH 32 // 1024 bits
#define MAX_UNSIGNED 4294967295
void bigBinaryAdd(unsigned long long *a, unsigned long long *b, unsigned long long *ret);
int main()
{
unsigned long long addend1[MAX_INT_LENGTH] = {4294967295, 4294967295};
unsigned long long addend2[MAX_INT_LENGTH] = {1, 4294967295};
unsigned long long ret[MAX_INT_LENGTH] = {0};
bigBinaryAdd(addend1, addend2, ret);
// 打印运算结果
for (int i = 0; i < MAX_INT_LENGTH; i++)
{
printf("%x ", addend1[i]);
}
printf("\n");
for (int i = 0; i < MAX_INT_LENGTH; i++)
{
printf("%x ", addend2[i]);
}
printf("\n");
for (int i = 0; i < MAX_INT_LENGTH; i++)
{
printf("%x ", ret[i]);
}
return 0;
}
void bigBinaryAdd(unsigned long long *a, unsigned long long *b, unsigned long long *ret)
{
unsigned long long tag = 0;
unsigned long long carry = 0;
for (int i = MAX_INT_LENGTH - 1; i >= 0; i--)
{
tag = a[i] + b[i] + carry;
carry = 0;
// 判断是否需要进位
while (tag > MAX_UNSIGNED)
{
carry++;
tag = tag - MAX_UNSIGNED - 1;
}
ret[i] = tag;
}
// 判断是否溢出
if (carry)
printf("addition caculation overflow\n");
}
二进制加法器C语言实现
最新推荐文章于 2024-02-02 00:46:05 发布