【问题标题】:Assigning Value to unsigned long long in C在 C 中为 unsigned long long 赋值
【发布时间】:2012-10-09 07:24:30
【问题描述】:

在 C 中为 unsigned long long 变量赋值时,变量的值未正确赋值。代码是:

#include <stdio.h>
int main()
{
  unsigned long long x;
  printf("%d\n\n",sizeof(x));
  x=0xAAAAAAAAAAAAAAAAULL;
  printf("%u\n\n",x);
  printf("%ld\n\n",x);
  return 0;
}

变量的最右边 32 位被忽略。有人可以告诉我如何正确地做到这一点。

【问题讨论】:

    标签: c long-integer


    【解决方案1】:

    %llu打印unsigned long long

    【讨论】:

      【解决方案2】:

      如果要打印 unsigned long long,请为 printf 使用 llu 或 Lu 格式说明符。格式说明符取决于编译器。

      【讨论】:

        【解决方案3】:

        分配正确进行。但是,程序没有正确显示该值。

        printf("%Lu\n\n",x);
        

        printf("%llu\n\n",x);
        

        甚至可能

        printf("%LLu\n\n",x);
        

        取决于编译器和特定的运行时库。

        【讨论】:

        • @izomorphius:我认为它是 System V,或者可能是我在英特尔 SSD 部门使用的定制 BSD(数百个 CPU 网状在一起)。那是至少 20 年前的事了。
        • @RogMatthews:如果您的意思是文字常量的后缀,那么是的:从整数到更大整数的类型提升总是根据需要进行。但是,这个常数非常大。一些编译器可能会给出警告或错误并坚持明确的大小后缀。更好的编译器不会。
        • @wallyk 刚才,作为一个例子,我需要添加显式转换来让 MSVS2010 C++ 编译器做正确的事情。如果我碰巧编译了 C 代码,我会假设也需要同样的东西。
        【解决方案4】:

        您需要更改printfs 才能正确打印。

        #include <stdio.h>
        int main()
        {
            unsigned long long x;
            printf("%d\n\n",sizeof(x));
            x=0xAAAAAAAAAAAAAAAAULL;
            printf("%u\n\n",x);  // not work
            printf("%llu\n\n",x);  // works
            printf("%016llx\n\n",x); // bonus check
            return 0;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-07-29
          • 1970-01-01
          • 1970-01-01
          • 2011-08-06
          • 1970-01-01
          • 2015-08-22
          • 2016-12-20
          • 2015-01-30
          相关资源
          最近更新 更多