【发布时间】:2025-11-30 12:15:01
【问题描述】:
这是我的代码
double blocksize = 32;
double indexSize, tagSize, offsetSize;
int main(int argc, char** argv) {
double index;
double cachesize = 1;
offsetSize = log(blocksize) / log(2.0);
index = cachesize/blocksize * 1024;
indexSize = (log(index) / log(2.0));
tagSize = 32 - indexSize - offsetSize;
printf("Offset : %f\n", offsetSize);
printf("Index: %f\n", index);
printf("Index : %f\n", indexSize);
printf("Tag : %f\n", tagSize);
return (EXIT_SUCCESS);
}
所以问题是,当我将所有内容分配给 int 时,我得到以下输出:
偏移量:5
索引:0
索引:-2147483648
标签:-2147483621
但是,当我将所有内容分配为双精度时,我会得到以下输出:
偏移量:5.000000
指数:32.000000
索引:5.000000
标签:22.000000
为什么我得到两个不同的输出?我认为 double 和 int 之间的唯一区别是 int 是整数,但 double 不是整数。它将作为输出返回,类似于我得到的 5.000000、32.0000 等。那么为什么我会得到两个不同的输出呢?
【问题讨论】:
-
a/b带整数也会进行整数除法,即 2/3 => 0。 -
当您在算术运算中使用整数时,结果会在每个点被截断为整数。例如,
10/20*20是0,但10.0/20.0*20.0是10.0。
标签: c