即使值在范围内,也无法获取“int”的百分比。但与“长”一起使用。为什么?

问题描述 投票:0回答:1

谁能向我解释一下为什么 util2=49,而 util1=5?

节目:

#include <stdio.h>

int main()
{
int load1 = 47759534;
int capacity1 = 96000000;

long load2 = 47759534;
int capacity2 = 96000000;

int util1 = (100*load1)/capacity1;
int util2 = (100*load2)/capacity2;

printf("util1 = %d\n", util1);
printf("util2 = %d\n", util2);

return 0;
}

输出:

util1 = 5
util2 = 49

我知道“int”至少为 16 位,“long”至少为 32 位,但上面代码片段中的 load1 在 int 和 long 的共同范围内,即 2,147,483,647。为什么 util1 四舍五入到 5?

c integer long-integer
1个回答
0
投票

在C中,int通常是32位。我们假设这里就是这种情况。当你乘以 100 时,二进制结果是:

000100011100101010110100001111111000

由于超过 32 位,因此最高有效位被丢弃。如果你取最低的 32 位,你会得到 00011100101010110100001111111000 = 480,986,104

如果你除以 96000000,你会得到 5。

© www.soinside.com 2019 - 2024. All rights reserved.