33

long int以下に示すように、タイプの変数が 2 つあります。

long int a=-2147483648, b=-2147483648;
a=a+b;

printf("%d",a);

私はゼロになっています。タイプを に変更してみましたlong long intが、まだ正しい答えが得られません。

4

3 に答える 3

58

を印刷するには を使用し、を%ld印刷するには を使用する必要があります。long int%lldlong long int

long long intその計算の結果 (または実際には、使用している入力値) を格納するのに十分な大きさであることが保証されているのはだけであることに注意してください。

また、コンパイラを C99 互換モードで使用していることも確認する必要があります (たとえば、-std=gnu99gcc へのオプションを使用)。これは、long long int型が C99 まで導入されなかったためです。また、多くのコンパイラlong long intは拡張機能として C90 モードで実装していますが、定数は C90 でまたは2147483648の型を持つ場合があります。実装がこれに該当する場合、 の値も unsigned 型になるため正になり、全体的な結果は期待したものとは異なります。unsigned intunsigned long-2147483648

于 2013-07-22T03:40:59.047 に答える
3

Use printf("%ld",a);

Have a look at format specifiers for printf

于 2013-07-22T03:44:08.520 に答える