乘法和除法无符号整数

Gop*_*hna 5 c time unsigned overflow multiplying

在我的程序中,我必须对无符号整数执行算术运算。

  • 变量a的范围为0到4294967295。
  • 变量b的范围是0到32。

当我通过取a和b的最大值来检查边界条件时,我得到0作为答案,因为当我尝试将aMAX_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用作变量。

vla*_*ada 2

这是风向标建议的解决方案

#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)