【发布时间】:2018-10-10 03:57:05
【问题描述】:
我是 C 编程新手,正在尝试理解数据类型。
我指定了以下变量:
int nsamples = 10000000;
int n = 32;
int m = 64;
int nrpoinnts = n*m*nsamples+99;
printf("Nr points %d\n",nrpoinnts);
由于某种原因,打印的数字是负数。为什么会这样?我坚持超过了nrpoints的值范围,所以我检查了两倍。最终的结果是我也得到了负值。
【问题讨论】:
-
因为它溢出了最大正 32 位整数。尝试使用 long long integer 和 %lld。
-
检查integer overflow以获得正确的解释。
-
如果要使用
double检查值,则需要在计算中将n、m或nsamples中的至少一个强制为浮点值,否则使用整数运算完成计算并将结果转换为double。因此:double num_points = (double)n * m * nsamples + 99;将产生一个正浮点值。
标签: c