为什么 sizeof(long long) return 8?
Why does sizeof(long long) return 8?
我是 C 的新手。sizeof(long)
returns 8 因为 long
的大小是 8 个字节(32 位 OS 是 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
具有更高的精度;可以相等。
我是 C 的新手。sizeof(long)
returns 8 因为 long
的大小是 8 个字节(32 位 OS 是 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
具有更高的精度;可以相等。