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

问题描述

我是 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) 到 +(263 -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 long 具有比 long 更高的精度;它可以相等。