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

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/12 05:14:21

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

如何用C语言设计一个32位无符号数长整数求和的函数?相加之和存储在两个32位无符号整数中 .输入的是两个 int型的,相加之后存储在两个int型的32位中
两个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]);
}

如何用C语言设计一个32位无符号数长整数求和的函数?相加之和存储在两个32位无符号整数中 .输入的是两个 int型的,相加之后存储在两个int型的32位中 计算长为10位的二进制无符号整数所表示的十进制数的范围.如题 C语言编程:输出一个3位整数的逆序数,如输入123,输出321. C语言中32位有符号整数如何定义 C语言32位有符号整数如何定义 C语言32位有符号数和无符号数之间怎么强制转换例如有个32位有符号数 -1946090562转为无符号的 2348876734不要用printf函数 把一个32浮点型的数符号位去掉 用C语言应该怎么写 一个11位的无符号二进制整数,转化为八进制数有()位 A.2 B.3 C.4 D.5 以下C语言程序的这句话中的 if(t/10) 15:第15题 请编写一个函数unsigned fun(unsigned w),w使一个大于10的无符号整数,若w使n(n≥2)位的整数,则函数求出w后n-1位的数作为函数值返回.unsigned fun(unsigned w){ 在C语言中一个整型常量后面加上一个字符u,则认为该数为unsigned int 型 如12345u表示无符号整数12345,如果写成-12345u 则先将-12345转换成补码53191 然后按照无符号数存储 后面的转码怎么转的? C语言中的无符号的整数是什么意思? C语言 -1 转换成 无符号整数是多少 几个计算机问题?1,用十六进制数表示一个字节的无符号整数,最多需要( 2 )位.2,正确表示32位二进制地址,最多需要( 8 )位.3,用八进制数表示一个字节的无符号整数,至少需要( 3 )位.4,数 怎样将一个ip地址写成一个32位无符号整数形式 什么是32位无符号长整型 C语言中为什么不能将无符号整数与有符号整数比较 如何用VB随机取一个整数(无范围)? 用十六进制表示一个字节的无符号整数,最多需要( )A、1位 B、2位 C、3位 D、4位