【问题标题】:which is the biggest datatype in c language to store large values?c语言中存储大值的最大数据类型是什么?
【发布时间】:2015-06-20 11:12:03
【问题描述】:

c 中最大的数据类型是什么,我可以在其中存储 10^17 等较大的值?并告诉在这种特殊情况下如何接受用户输入、存储、打印它们。

【问题讨论】:

  • 使用unsigned long long int。它最多可以存储2^64 - 1

标签: c


【解决方案1】:

一个特定的实现可以选择支持实现定义的扩展整数类型(N1570 6.2.5类型):

4) 也可能存在实现定义的扩展有符号整数 types.38) 标准和扩展的有符号整数类型 统称为有符号整数类型39)

6) 对应于扩展有符号的无符号整数类型 整数类型是扩展的无符号整数类型。标准 和扩展的无符号整数类型统称为无符号 整数类型.40)

动机很可能允许使用 128 位宽的整数,但似乎对此不感兴趣。特定实现更有可能通过 gcc 中的 __int128 等扩展支持此类整数。

但是,如果您的要求高达 1017,那么您可以使用标准的无符号整数类型,例如 unsigned long long int。它保证至少为 64 位宽,因此可能的范围至少为 [0, 264-1],即略大于 18 * 1018

请注意,long long 类型是在 C99 中引入的,但很可能甚至更旧的 C89 编译器都通过扩展支持它们。检查编译器的文档以获取任何详细信息。

printf()scanf() 在格式说明符中都需要前缀 ll。例如:

unsigned long long n = ULLONG_MAX;
printf("lld", n);

【讨论】:

  • 非常感谢 Grzegorz。
  • 我在搜索如何扫描 __int128 时在堆栈溢出中发现了这个问题。正如您的回答所指的那样,您知道如何扫描它吗?我正在尝试存储 30 位长的数字
  • @TestitemQlstudop:见this 答案。长话短说:您需要自己处理它,或者只使用GMP 库,它提供了像gmp_scanf 这样的便利功能。
猜你喜欢
  • 2016-03-03
  • 2016-09-06
  • 2019-01-02
  • 2014-09-12
  • 2011-12-03
  • 2012-12-28
  • 2011-01-04
  • 2015-05-09
  • 2015-08-15
相关资源
最近更新 更多