我是C编程的新手,试图理解数据类型。
我指定了以下变量:
int nsamples = 10000000;
int n = 32;
int m = 64;
int nrpoinnts = n*m*nsamples+99;
printf("Nr points %d\n",nrpoinnts);
由于某些原因,打印的号码为负数。为什么会这样呢?我认为nrpoinnts的值范围已超出,因此我检查了两倍。最终结果是我也得到了负值。
答案 0 :(得分:5)
您正在使用的已签名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;
}
输出: −2147483648
使用 unsigned long 代替int
来包含结果。
答案 1 :(得分:3)
乘积的值为20,480,000,000
。
如果int
在系统上长4个字节,则它可以具有的最大值为2,147,483,647
。
您可以检查INT_MIN
中定义的INT_MAX
和limits.h
宏的值
这两个宏的值都取决于编译器,因为sizeof(int)
是在C和C ++中定义的实现。
超过此INT_MAX
值时,在此特定实例中它将打印一个负值。但请注意,根据标准,有符号整数溢出是未定义的行为。
因此,您可以使用unsigned long long
代替int
来存储算术运算的值。
答案 2 :(得分:2)
更改
int nrpoinnts
到
unsigned long int nrpoinnts