1

最近我尝试编写一个在给定 n 中搜索某个数字的代码。该代码运行良好,但是当我尝试插入超过 10 位的 n 时,它变得非常糟糕。

显然它与代码无关,我只是不能插入超过 10 位数字。我肯定错过了什么...

例如这个简单的代码

#include <stdio.h>

int main()
{
  long int n;

  scanf("%ld", &n);

  printf("%ld", n);

  return 0;
} 

如果我给它 1111111111 它会打印同样的东西,因为它少于 11 个数字 如果我尝试给它 11111111111 它会给我类似 -1773790777 的东西为什么会发生在我身上?我究竟做错了什么...

4

2 回答 2

2

我猜你在一台 32 位机器上,这意味着它long int只有 32 位,这意味着它可以保存负 20 亿到正 20 亿之间的值。当您尝试输入更多内容时,该值将结束。

long long int如果您的编译器支持,您应该开始使用 64 位值。

于 2012-11-24T11:34:14.943 回答
1

有符号整数溢出是未定义的行为。我认为你long int是 4 个字节,当你输入一个比它可以容纳的更大的数字时会导致溢出。

于 2012-11-24T11:36:05.630 回答