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

din*_*ndu 3 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;
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*hil 5

C 标准不需要long long16 字节或比long.

在 C 2018 5.2.4.2.1 1 中,标准要求long long能够表示从 ?(2 63 ?1) 到 +(2 63 ?1) 的数字。这至少需要 64 位,因此 along 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; 它可以相等。