【问题标题】:Printing long int value in C在 C 中打印 long int 值
【发布时间】:2013-07-22 03:39:20
【问题描述】:

我有两个long int类型的变量如下图:

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

printf("%d",a);

我得到了零。我尝试将类型更改为long long int,但仍然没有得到正确答案。

【问题讨论】:

  • %d 期望 int...

标签: c


【解决方案1】:

您必须使用%ld 打印long int,并使用%lld 打印long long int

请注意,只有long long int 保证足够大以存储该计算的结果(或者,实际上,您正在使用的输入值)。

您还需要确保在 C99 兼容模式下使用编译器(例如,使用 gcc 的 -std=gnu99 选项)。这是因为 long long int 类型直到 C99 才引入;尽管许多编译器在 C90 模式下将 long long int 实现为扩展,但常量 2147483648 在 C90 中可能具有 unsigned intunsigned long 类型。如果在您的实现中是这种情况,那么-2147483648 的值也将具有无符号类型,因此为正数,总体结果将不是您所期望的。

【讨论】:

  • int main() { long long int a,b; scanf("%d%d",&a,&b); a=a+b; printf("%lld",a); getch();返回0; } 仍然没有运气先生....
  • @JijoPi 也将%lld 用于scanf()
  • int main() { long long int a,b; a=-2147483648; b=a; a=a+b; printf("%lld",a); getch();返回0; }......仍然没有得到答案......我认为标志丢失了......
  • @JijoPi - 刚刚逐字尝试了你的程序,它奏效了。你的字号是多少? (printf("%d",sizeof(long long int)); 的输出是什么?)
  • @cluracan:常量的确切类型取决于您的基本类型的宽度。如果您有一个带有 64 位 long int 的 C90 编译器,那么 2147483648 的类型将是 long int 类型(所以,有符号)。但是,如果您的 C90 编译器具有 32 位 long int,则 2147483648 的类型将为 unsigned long int。这在 C90 标准的 §3.1.3.2 中定义: 整数常量的类型是可以表示其值的相应列表的第一个。无后缀十进制:intlong intunsigned long int.
【解决方案2】:

使用printf("%ld",a);

看看format specifiers 的 printf

【讨论】:

    【解决方案3】:

    在 C 中获取输入“long int”并输出“long int”是:

    long int n;
    scanf("%ld", &n);
    printf("%ld", n);
    

    在 C 中获取输入“long long int”并输出“long long int”是:

    long long int n;
    scanf("%lld", &n);
    printf("%lld", n);
    

    希望你已经清除了..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2011-05-01
      • 2012-05-26
      • 2011-03-13
      • 2020-01-22
      • 2011-05-08
      相关资源
      最近更新 更多