c - 打印负数

标签 c

我是 C 编程的新手,正在尝试了解数据类型。

我指定了以下变量:

  int nsamples = 10000000;
  int n = 32;
  int m = 64;


  int nrpoinnts = n*m*nsamples+99;
  printf("Nr points %d\n",nrpoinnts);

由于某种原因,打印出来的数字是负数。为什么会这样?我认为超出了 nrpoints 的值范围,所以我检查了两次。最后的结果是我也得到了负值。

最佳答案

您正在使用的带符号 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

使用 long unsigned 而不是 int 来包含结果。

关于c - 打印负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52732398/

相关文章:

c - 为什么这些构造使用增量前和增量后未定义的行为?

c - 高效的 SSE FP `floor()`/`ceil()`/`round()` 没有 SSE4.1 的舍入函数?

c - C 条件语句中的意外输出

c - 使用 GMP 库执行文件时出错

c - 在 c 中使用数组分配 LIFO 内存的目的是什么?

在 C 中将一个 int 转换为一个 4 字节的 char 数组

c - 将字符数组中的字符放入字符串中,直到找到特定字符

c - 如果有超过 1 个最大值,如何打印第一次出现的情况?

c - 内核模块编程(中断处理程序)

C 内存分配 - char* 和 char sizeof