回归很长的价值

时间:2011-01-24 22:25:35

标签: c++ c visual-c++ long-long

#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 Studio 2010和Visual C ++编译器。

4 个答案:

答案 0 :(得分:4)

IIRC,C / C ++中的长长常数后缀为'LL'。

long long test() {
    return 1111111111111111111LL;
}

你的编译器将你的常量视为32位长(如果你取常数模2 ^ 32,则得到734294471。)

答案 1 :(得分:3)

您需要在调用之前声明test,否则C假定它返回int

答案 2 :(得分:1)

尝试将LL添加到您的返回值:

long long test()
{   
    return 1111111111111111111LL;
} 

答案 3 :(得分:0)

将后缀LL添加到文字中,看看会发生什么。据推测,编译器将文字强制转换为int。您是否收到编译器的任何警告?