【问题标题】:Int types in C/C++ [duplicate]C/C++ 中的 Int 类型
【发布时间】:2013-01-16 22:28:56
【问题描述】:

可能重复:
Why are C++ int and long types both 4 bytes?

在C/C++中,有什么区别:

u_int64 myNum;

和:

unsigned long myNum;

据我所知,两者都只吃无符号整数,内存为 64 位。

【问题讨论】:

标签: c++ c 64-bit int


【解决方案1】:

unsigned long 没有 为 64 位,而 uint64_t 有。有一种整数类型的层次结构,其中每种类型都必须至少与前面的类型一样大:signed charshortintlonglong long,对于它们的无符号对应物也是如此。有一些锚点,指出char 是一个字节(一个字节不一定是 8 位,据我记得short 至少是 2 个字节 16 位。在C++11,long long is at least 64 bits。但这些类型都不是完全给定的位数。

更多信息请参见fixed width integer types(感谢@chris 提供链接)。

【讨论】:

  • 所以如果我想要一个始终是 64 位的数字,我应该使用 u_int64
  • @ChristianDaley,见here。它可能会帮助你。
  • @ChristianDaley 你的意思是uint64_t?如果是这样,是的。但是,如果您的平台不提供 64 位类型,则该类型可能不存在。总是有uint_least64_t,它将提供至少有 64 位的第一个类型。
  • 您的层次结构应以signed char 开头。赤裸裸的char 有点奇怪。
  • short 只有一个字节长是完全可行的。其实你可以有sizeof(char) == sizeof(short) == sizeof(int) == 1,只要char足够宽。
【解决方案2】:

unsigned long 依赖于机器,就像 C/C++ 中的每个 int 一样。许多库,尤其是允许两台机器交互的库,都会键入 def most int 之类的数字,以确保两者的大小相同。 u_int64 基本上是 64 位无符号整数的 def 类型,以允许在任何机器上使用。理论上unsigned long 可以是 128、64、256 或几乎任何大小。

【讨论】:

    【解决方案3】:

    C 语言本身并没有指定int 的大小

    long 只需至少与int 一样长
    long long 只需至少与long 一样长

    u_int64_t 也是 c99 类型,在 ANSI c89 中不可用。

    在 64 位架构中也存在差异 LP64 表示 long 和指针是 64 位的,LLP64 表示 long long 和指针是 64 位的。

    【讨论】:

    • 好的,谢谢。我可以在 Xcode 中使用 u_int64 吗?
    • C 没有u_int64 类型。 C 有一个可选的uint64_t 类型。
    • 是的,您可以在苹果网站上找到的任何版本的 xcode 都将包含符合 c99 的编译器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 2015-03-01
    • 2010-09-24
    • 2016-12-03
    相关资源
    最近更新 更多