c - 为什么 sizeof(long long) 返回 8?

标签 c sizeof

<分区>

我是 C 的新手。sizeof(long) 返回 8,因为 long 的大小是 8 个字节(32 位操作系统为 4 个字节)。

但是我想知道为什么sizeof(long long)也是8,不应该是16吗?

#include <stdio.h>
#include <stdint.h>

int main() {
  printf("%zu\n", sizeof(unsigned long));
  printf("%zu\n", sizeof(unsigned long long));

  return 0;
}

最佳答案

C 标准不要求 long long 为 16 字节或比 long 更宽。

在 C 2018 5.2.4.2.1 1 中,标准要求 long long 能够表示从 −(263−1) 到 +(2 63−1).这至少需要 64 位,因此 long long 必须至少有 8 个 8 位字节(或者,例如,4 个 16 位字节)。 C 实现可选择使 long long 更宽并支持更大的范围。

在6.3.1.1 1中,标准要求long long(也称为long long int)的秩大于long的秩。根据“等级”的定义,这意味着 long long 必须至少具有与 long 一样多的精度。 (整数类型的精度是用来表示值的位数,不包括符号位。)标准不要求 long longlong;可以相等。

关于c - 为什么 sizeof(long long) 返回 8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68058381/

相关文章:

c - 为什么我不能在 #if 中使用 sizeof()?

c - 为什么此 C 程序代码输出为 False?预期输出为真

c++ - sizeof(unsigned char) 也保证为 1 吗?

c - C 中各种字符串初始化的大小差异

c - 强制读取 volatile 变量

c - 在事件发生之前保持线程不活动?

c++ - 如何解决 linux 定时器信号处理程序

c - 如何使用 C 在 Berkeley DB 中将整数值分配给 "key.data"

c++ - (1 << 27) 的十六进制值是多少?

c - 以下 "assert_disabled()"宏如何工作?