我是C编程新手并试图理解数据类型.
我指定了以下变量:
int nsamples = 10000000;
int n = 32;
int m = 64;
int nrpoinnts = n*m*nsamples+99;
printf("Nr points %d\n",nrpoinnts);
Run Code Online (Sandbox Code Playgroud)
由于某种原因,打印的数字是负数.为什么会这样?我很难超过nrpoinnts的价值范围,所以我检查了双倍.最终的结果是我也得到了负值.
签名int或仅int使用的限制/范围,即使在具有4字节整数的64位机器上,也是2,147,483,647(作为其最大值)和-2,147,483,648(作为其最小值) - 您尝试生成/打印的值是20480000000,大于限制/范围 - 因此它是包装和生产-ve结果.
例:
#include<stdio.h>
int main()
{
printf("%d\n",2147483647+1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT: ?2147483648
使用long unsigned而不是int包含结果.