【问题标题】:long long integer is not working in C(UNIX+AIX6.1)long long integer 在 C(UNIX+AIX6.1) 中不起作用
【发布时间】:2013-08-13 07:59:41
【问题描述】:

我在 AIX 6.1 (Unix) 上使用 cc 编译器

#include<stdio.h>

int main()
{
    long long var;
    scanf("%lld",&var);
    printf("%lld",var);
    return 0;
}

/* When I enter 16 digit number for above code its working*/

=========================================

但我不确定为什么下面的代码没有显示正确的值

#include<stdio.h>

int main()
{
    long long var=1234567890123456;
    printf("%lld",var);
    return 0;
}

请帮忙?

【问题讨论】:

  • 修复丢失的分号后,它似乎工作正常:ideone.com/2Ge1w0
  • 对不起!我的错误..我忘了包括“;”在上面的代码中。
  • 实际上我在第二个代码中得到了一些垃圾值
  • @sku 你可以为我们转储第二个代码吗?
  • 这行得通吗? long long var=1234567890123456LL;(打印的是什么值?)

标签: c unix aix long-long


【解决方案1】:

正如@rici 指出的那样,问题在于var 分配。

// long long var=1234567890123456;
long long var=1234567890123456LL;  // append LL
printf("%lld",var);

1234567890123456 对于 OP 环境中的 intunsigned 来说太大了。要指定更高的值,请使用希望后缀。


我怀疑1015724736 最初被 OP 打印为 1234567890123456 % 4294967296。4294967296 是 OP 的unsigned 的假定范围(0 到 4294967295)。

【讨论】:

    【解决方案2】:

    通常%lld 适用于抄送。试试%I64d

    【讨论】:

    • Scotty,你能告诉我什么是 objdump 以及如何 objdump 一个 C 代码吗?
    • @sku,objdump 所做的是将编译后的 C 文件从二进制反汇编为汇编指令。我让你 obj 转储它,因为有时编译器会对你的代码做出你不是故意的假设。您可以在此处阅读有关 objdump 的更多信息:thegeekstuff.com/2012/09/objdump-examples
    猜你喜欢
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 2015-07-20
    • 1970-01-01
    相关资源
    最近更新 更多