如何用C语言设计一个32位无符号数长整数求和的函数?相加之和存储在两个32位无符号整数中 .输入的是两个 int型的,相

学习 时间:2026-04-08 23:33:54 阅读:510
如何用C语言设计一个32位无符号数长整数求和的函数?相加之和存储在两个32位无符号整数中 .输入的是两个 int型的,相加之后存储在两个int型的32位中

最佳回答

老迟到的咖啡

标致的小海豚

2026-04-08 23:33:54

两个32位相加,结果肯定小于32位 * 2即33位,所以结果的两个无符数中高位的那个只能是0或者1当相加的两个数太大发生溢出的时候,结果的高32位手工置为1; 没有溢出的时候为0所以低32位就是直接相加,而高32位的值取决于相加的两个数是否会造成溢出如果溢出,直接相加的结果会被截断,所以c = a + b,如果发生溢出,截断后的c是小于a且小于b的,因为有部分被用来填充了上面就是原理void add(unsigned int lhs,unsigned int rhs,unsigned int *pResult){pResult[1] = rhs + lhs;pResult[0] = pResult[1] < lhs && pResult[1] < rhs;}void add2(unsigned lhs,unsigned rhs,unsigned *pResult){// 呃。。这是无聊的做法; 标准当中long long是64位的long long l = lhs;l += rhs;unsigned *p = (unsigned*)&l;pResult[0] = p[1];pResult[1] = p[0];}int main(){unsigned int result[2] = {0};add(1u,10u,result);printf("%d,%d\n",result[0],result[1]);add(1u,0xffffffffu,result);printf("%d,%d\n",result[0],result[1]);add(3u,0xffffffffu,result);printf("%d,%d\n",result[0],result[1]);add2(1u,10u,result);printf("%d,%d\n",result[0],result[1]);add2(1u,0xffffffffu,result);printf("%d,%d\n",result[0],result[1]);add2(3u,0xffffffffu,result);printf("%d,%d\n",result[0],result[1]);}

最新回答共有2条回答

  • 高大的烤鸡
    回复
    2026-04-08 23:33:54

    两个32位相加,结果肯定小于32位 * 2即33位,所以结果的两个无符数中高位的那个只能是0或者1当相加的两个数太大发生溢出的时候,结果的高32位手工置为1; 没有溢出的时候为0所以低32位就是直接相加,而高32位的值取决于相加的两个数是否会造成溢出如果溢出,直接相加的结果会被截断,所以c = a + b,如果发生溢出,截断后的c是小于a且小于b的,因为有部分被用来填充了上面就是原理void add(unsigned int lhs,unsigned int rhs,unsigned int *pResult){pResult[1] = rhs + lhs;pResult[0] = pResult[1] < lhs && pResult[1] < rhs;}void add2(unsigned lhs,unsigned rhs,unsigned *pResult){// 呃。。这是无聊的做法; 标准当中long long是64位的long long l = lhs;l += rhs;unsigned *p = (unsigned*)&l;pResult[0] = p[1];pResult[1] = p[0];}int main(){unsigned int result[2] = {0};add(1u,10u,result);printf("%d,%d\n",result[0],result[1]);add(1u,0xffffffffu,result);printf("%d,%d\n",result[0],result[1]);add(3u,0xffffffffu,result);printf("%d,%d\n",result[0],result[1]);add2(1u,10u,result);printf("%d,%d\n",result[0],result[1]);add2(1u,0xffffffffu,result);printf("%d,%d\n",result[0],result[1]);add2(3u,0xffffffffu,result);printf("%d,%d\n",result[0],result[1]);}

上一篇 以下这个字可以组成哪些词语?

下一篇 In kenya.people born wiht multiple physical challenges have