質問

#include <stdio.h>

int main(void) 
{
    long long x = test();
    printf("%lld\n", x);

    return 1;
}

long long test()
{   
    return 1111111111111111111;
} 

出力は734294471です。通話を交換した場合 test() 数によって、出力は私が期待する通りです。デバッガーを使用してXの値を確認しましたが、関数によって返される値は設定されていませんでした。何が問題になっていますか?

Visual C ++コンパイラでVisual Studio 2010を使用しています。

役に立ちましたか?

解決

宣言する必要があります test あなたがそれを呼ぶ前に、そうでなければcはそれが戻ると仮定します int.

他のヒント

IIRC、C/C ++の長い定数は「LL」によって接尾辞が付けられています。

long long test() {
    return 1111111111111111111LL;
}

コンパイラは、定数を32ビットの長さとして扱っています(定数測定値2^32を取得した場合、734294471を取得します。)

返品値にLLを追加してみてください:

long long test()
{   
    return 1111111111111111111LL;
} 

リテラルに接尾辞LLを追加して、何が起こるかを確認します。おそらく、コンパイラはintの文字通りです。コンパイラから警告がありますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top