Gop*_*hna 5 c time unsigned overflow multiplying
在我的程序中,我必须对无符号整数执行算术运算。
当我通过取a和b的最大值来检查边界条件时,我得到0作为答案,因为当我尝试将a和MAX_NS相乘时发生溢出。理想情况下,我应该得到7作为答案。我该如何编写程序这样就可以解决溢出问题,我得到7作为答案,并希望它适用于a和b的其他有效值范围。
#include "stdio.h"
#define MAX_NS 1000000000
int main()
{
unsigned int a = 4294967295;
unsigned int b = 32 ;
unsigned int c = ((b * MAX_NS)/a);
printf("%d",c);
}
Run Code Online (Sandbox Code Playgroud)
**编辑:**请注意,我不能长时间使用unsigned long。只能将unsigned int用作变量。
这是风向标建议的解决方案
#include "stdio.h"
#define MAX_NS 1000000000
int main()
{
unsigned long long a = 4294967295;
unsigned long long b = 32;
unsigned long long c = ((b * MAX_NS) / a);
printf("%llu", c);
}
Run Code Online (Sandbox Code Playgroud)