【问题标题】:How to use Long data type in C?如何在 C 中使用 Long 数据类型?
【发布时间】:2011-12-24 04:25:36
【问题描述】:

我对在 C 中工作多长时间有点困惑。

如果我在 Java 中询问 long 的最大值,我会得到一个以 quintillions 为单位的数字。如果我用 C 语言要求它,无论是签名的还是未签名的,都是数十亿。

Java 是基于 C 构建的...那么差异来自哪里?

我还尝试用 long long 值、无符号/有符号 long 值和 long int 值来表示文字。他们似乎都没有处理超过数十亿的数字。为什么?我是不是搞错了?

【问题讨论】:

标签: java c rounding long-integer


【解决方案1】:

C 标准将long 定义为至少与int 一样大。实际大小取决于实现。 Java 的情况并非如此,其中long 的长度必须为 64 位。

C99 标准定义了固定大小的整数类型,例如在 stdint.h 中定义的 int64_t,如果您在所有平台上都需要固定大小的整数,您可以使用这些类型。

【讨论】:

  • 只是添加评论:这通常取决于您的操作系统的位,但当然不一定是这样。
  • 我可以在标准 C 库中使用 64 位长吗?
  • @ghostsoldier23 对于采用 64 位值的库,您可以使用 64 长,通常需要将您的程序编译为 64 位,例如当size_t 是 64 位时。
【解决方案2】:

C 也有 long long 类型。保证至少是 64 位的。

【讨论】:

  • C99 将 long long int 定义为至少能够容纳 64 位有符号整数并且大于 long int 的大小。它不一定是 64 位。
  • @MehrdadAfshari,对,我不够精确,谢谢,已更改。
  • @Mehrdad:实际上,您说long long int 的大小必须严格大于long int 的大小;那是对的吗?当然,符合要求的实现可以提供与long int 相同大小的long long intlong long int 的大小不能小于long int 的大小。
  • @JonathanLeffler 不严格。更大的 ">=" 这是我在我的答案中写的 - 但long int 至少应该是 32 位,long long int 应该至少是 64 位。如果一个符合要求的实现要对两者使用相同的大小,但是在这种情况下,两者都应该至少为 64 位。
【解决方案3】:

如果您想处理更大的数字,您可以在此处使用 GNU MP Bignum 库: http://gmplib.org/ 数字和精度仅受运行它的机器的可用内存限制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多