【发布时间】: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
我有两个long int类型的变量如下图:
long int a=-2147483648, b=-2147483648;
a=a+b;
printf("%d",a);
我得到了零。我尝试将类型更改为long long int,但仍然没有得到正确答案。
【问题讨论】:
%d 期望 int...
标签: c
您必须使用%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 int 或 unsigned long 类型。如果在您的实现中是这种情况,那么-2147483648 的值也将具有无符号类型,因此为正数,总体结果将不是您所期望的。
【讨论】:
%lld 用于scanf()。
printf("%d",sizeof(long long int)); 的输出是什么?)
long int 的 C90 编译器,那么 2147483648 的类型将是 long int 类型(所以,有符号)。但是,如果您的 C90 编译器具有 32 位 long int,则 2147483648 的类型将为 unsigned long int。这在 C90 标准的 §3.1.3.2 中定义: 整数常量的类型是可以表示其值的相应列表的第一个。无后缀十进制:int、long int、unsigned long int.
使用printf("%ld",a);
看看format specifiers 的 printf
【讨论】:
long int n;
scanf("%ld", &n);
printf("%ld", n);
long long int n;
scanf("%lld", &n);
printf("%lld", n);
希望你已经清除了..
【讨论】: