【问题标题】:Long long is 8 bytes, meaning?long long是8个字节,是什么意思?
【发布时间】:2015-07-23 17:55:06
【问题描述】:

我已经阅读了为什么sizeof(long long) 在大多数系统上为 8 的问题的答案,但我仍然不确定如何解释它们的含义。

给出的原因之一是“那里”有很多代码假定sizeof(long long) <= sizeof(size_t)。这就说得通了。然后是关于建筑公约和品牌等的各种观点。我什至不想进入那些关于公约历史的辩论。还有一些原因,long long 根据标准可以是任意大小,但我认为这并不是我真正关心的问题。

我想知道的是如何解释现在之间的区别,sizeof(long long) 返回 8 而 long long 实际上是 16。它是否应该被解释为历史残余仅适用于 sizeof 运算符,或者是否存在与该事实相关联的底层地址指针,以便 long long 上的操作以 8 字节增量执行?

Sizeof (signed) long v4: 8 (x at 2147483647)v4 的值:7fffffff

sizeof long long v5: 8 (x at 9223372036854775807)v5 的值:7fffffffffffffff

【问题讨论】:

  • long long 应该是 16 个字节吗? long long 应该是 64 位类型,因此它的大小应该是 8 字节。看看这个:en.cppreference.com/w/cpp/language/types
  • 我添加了澄清信息。
  • 还是不明白 16 是从哪里来的
  • 我将每个“半字节”计算为一个“字节”。我的问题应该是为什么 long 返回 8 但只保留 4 个字节。
  • 最初的问题是处理器是否将 long long 视为一个单元。显然,即使是 long 也有 8 个字节,尽管它只使用 4 个字节。不过,这是一个不同的问题。感谢您对原始问题的帮助。

标签: c++ c long-long


【解决方案1】:

大多数系统上最长的标准数据类型是 8 字节(64 位),即long long


此外,您还可以包含 limits.h,该库包含为每种数据类型定义的值以及它在系统上占用的空间。


在我遇到对long 的某种程度的兴趣期间,我做了一个小更新。 它保证至少有 32 位(或 4 个字节)长。就像long int 一样(尽管在这种情况下,long 是一个长度修饰符)。

【讨论】:

  • long long 很少(如果有的话)4 字节,即使在 32 位系统上也是如此。 long 变化很大。
  • 是的。我认为might 在英语中的意思是.. 不太可能,而且比“可能”更不可能。虽然我有一台 dos 电脑,而 long long 是 32 位的。带有 x32 位硬件的 x32 位拱形电脑
  • 现在的标准是 long long 至少为 64 位。请参阅 C++11/C11 标准 5.2.4.2.1。 maximum value for an object of type unsigned long long int ULLONG_MAX 18446744073709551615 // 2^64 − 1
  • 再一次,如果char 不是 8 位呢?
  • @user3528438 long long 保证至少为 64 位。它可以更多。
【解决方案2】:

根据标准,long long 至少是 64 位,或者说是 8 个字节。

在今天的大多数机器上,它是 8 个字节长。 sizeof(顺便说一句,一个运算符,而不是一个函数)返回它的大小,你可以指望它。 sizeof(long long) 不可能是8long long 的大小是16

【讨论】:

  • 如果a16位char怎么办?
  • 也许引用有问题的段落。
  • 我把一个字节和一个半字节搞混了,我的问题应该是为什么 long 返回 8,而它只包含 4 个字节。
  • @MarkLeavenworth long?这是与long long 不同的类型。
  • 接下来的问题是为什么 sizeof(long) 返回 8,但只保存 4 个字节。这不是真正的原始问题,但我想我还是会出于好奇而发布它。感谢您帮助回答原始问题。
【解决方案3】:

问题是您的系统的一部分已切换到 64 位,而您的系统的一部分仍以 32 位运行。

【讨论】:

    【解决方案4】:

    在某个地方存在混淆,我不确定它在哪里,因为你没有说你从哪里得到你的数字,所以我会尽量澄清基础知识。

    sizeof 根据定义返回一个类型占用的字节数。在所有现代系统上,一个字节由 8 位组成,但在某些深奥或旧架构上,一个字节具有其他位数。 CHAR_BIT 来自limits.h 告诉您一个字节中有多少位。但同样,在所有现代架构上都是 8。

    sizeof(long long) 返回 8,但 long long 实际上是 16。

    这不是真的。如果 sizoef(long long) 是 8,那么 long long 是 8 个字节长。

    接下来的问题是为什么 sizeof(long) 返回 8,但只保存 4 个字节。

    再一次,不是真的。如果sizeof (long)8,那么long 拥有8 个字节。

    问题是我们是否应该预期消除 4 字节长。

    在地狱里没有机会。 C 和 C++ 的支柱之一是向后兼容性。删除基本类型几乎会破坏地球上的所有程序。

    如果您问intlong long 似乎涵盖了所有内容时是否使用long 类型,那么答案又是intlong long 不要涵盖所有内容。有系统,例如arduino sizeof int == 2, sizeof long == 4sizeof long long == 8.

    【讨论】:

    • 当时我使用的是 64 位硬件计算机和 32 位软件,当时 Apple 从 32 位切换到 64 位。我的软件正在更新中。
    • 积分已授予。我道歉。我的美式夸张对我的朋友造成了意外的冒犯。
    • @MarkLeavenworth 道歉接受了,尽管那不是我的意图。我想知道我是如何冒犯你的。
    • @MarkLeavenworth 哦,我什至没有意识到这是一个老问题。我刚刚在主页提要上看到它。
    • 我深表歉意。我的评论是针对这个论坛的恶魔般的自封“领导者”,而不是针对您或您的评论。感谢您为帮助自己和他人所做的努力。
    猜你喜欢
    • 2021-05-07
    • 2021-11-03
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多