谁能向我解释一下为什么 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中,int通常是32位。我们假设这里就是这种情况。当你乘以 100 时,二进制结果是:
000100011100101010110100001111111000
由于超过 32 位,因此最高有效位被丢弃。如果你取最低的 32 位,你会得到 00011100101010110100001111111000 = 480,986,104
如果你除以 96000000,你会得到 5。