我想要一个可以在C中保存值12,000,000,000(120亿)的数据类型。哪种数据类型接受此值?
我已经尝试了long int
和long long int
。
答案 0 :(得分:2)
12,000,000,000当然可以放在long long
和更高等级的类型中,因为9,223,372,036,854,775,807
指定范围至少 [ - (2 ^ 63 - 1).. 。+(2 ^ 63 - 1)]或long long twelve_mil = 12000000000; // No suffix needed
。
unsigned long
排名较低的类型,例如long
,unsigned
,int
,long
可能也可以使用。示例:C指定#if 12000000000 >= INT_MAX
int twelve_mil = 12000000000;
printf("%d\n", twelve_mil);
#elif 12000000000 >= LONG_MAX
long twelve_mil = 12000000000;
printf("%ld\n", twelve_mil);
#else
long long twelve_mil = 12000000000;
printf("%lld\n", twelve_mil);
#endif
的最小范围为[-2147483647 ... +2147483647],但可能更多。
unsigned short
我们可以对此进行扩展,以考虑排名较低的类型,例如short
,unsigned char
,signed char
char
甚至int64_t
。在许多机器上都没有成果。
代码可以考虑使用#include <stdint.h>
。这个常见的可选类型在int_least64_t
中定义。同样声明有#include <stdint.h>
// for format specifiers
#include <inttypes.h>
int_least64_t twelve_mil = 12000000000;
printf("%" PRIdLEAST64 "\n", twelve_mil);
// or
int64_t twelve_mil = 12000000000; // Commonly available
printf("%" PRId64 "\n", twelve_mil);
,自C99以来一直可用。
<animate>
答案 1 :(得分:0)
使用long long int
和unsigned long long int
,或int64_t
中的固定尺寸版本uint64_t
和stdint.h
。无符号版本的最大值是签名版本的两倍。任何一个都可以保持你想要的价值。
long long int x0 = 12000000000ll;
unsigned long long int x1 = 12000000000ull;
或
#include "stdint.h"
int64_t x0 = 12000000000ll;
uint64_t x1 = 12000000000ull;
您可以将签名的长号打印为printf("%lld", x0);
,将无符号长号打印为printf("%llu", x1);
。