1

最近、特定の n で特定の数を検索するコードを作成しようとしました。コードは完全に機能しましたが、10 桁を超える n を挿入しようとすると、本当にうまくいきませんでした。

どうやらコードとは何の関係もないようで、10桁を超える数字を挿入できませんでした。私は何かが欠けているに違いない...

たとえば、この単純なコード

#include <stdio.h>

int main()
{
  long int n;

  scanf("%ld", &n);

  printf("%ld", n);

  return 0;
} 

1111111111 をフィードすると、11 桁未満であるため、同じことが出力されます。私は何を間違っていますか...

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 に答える