思路解析
想法介绍
由于32位数据相加可能产生33位数据,但是32位数据变量无法存储
所以需要一个存储33位数据的空间,或者将第33位数据存储于另一个32位的变量
本代码采用的是足够长度的字符串存储相应的数据
实现过程
1、将无符号整形数据以%u的形式存储于两个字符串数组中,补足其数据首位不足33位的数据位
2、一个基于数据长度的循环从数据低位开始进行加法运算,ASCII码运算,字符数据与实际整形差 值为48,位运算产生进位时将字符值-10归位,并置位进位信号,然后在高一位的数据处理中进行进位操作
3、由于在进位计算过程中,32位数据最大值进位时会回归0,由此会少一,需要在代码中手动增加
代码实现
#include<stdio.h>
#include<string.h>
void sum(char*arr,char*brr)
{
int i=0,j=0,flag=0;
char temp;
for(i=0;arr[i]!='\0';i++)
{}
arr[i-1]+=1;
for(j=0;brr[j]!='\0';j++)
{}
j--;
i--;
for(j;j>=0;j--)
{
if(i>=0)
{
temp=arr[i]+brr[j]-48;
i--;
}
else
{a
temp=brr[j];
}
if(flag==1)
{
temp++;
flag=0;
}
if(temp>'9')
{
temp=temp-10;
flag=1;
}
arr[j]=temp;
}
}
int main(int argc, char const *argv[])
{
unsigned char arr[33]={0};
bzero(arr,sizeof(arr));
unsigned char brr[32]={0};
bzero(brr,sizeof(brr));
unsigned int a=0xffffffff,b=0x00000002;
unsigned int c=a+b,d=0;
if(c<a||c<b)
{
sprintf(arr,"%d%u%c",0,c,'\0');
sprintf(brr,"%d%u%c",0,a,'\0');
sum(arr,brr);
}
printf("%s\n",arr);
return 0;
}