gpt4 book ai didi

c - 128位机器中 "long long"的大小?

转载 作者:太空狗 更新时间:2023-10-29 14:58:46 26 4
gpt4 key购买 nike

在 128 位 RISC-V(或其他 128 位机器)中,C/C++ 中的“long”和“long long”数据类型有多大?

澄清一下:在没有其他实现要符合的情况下,编译器的实现者在为这种机器编写 limits.h 文件时可能会使用什么大小?

最佳答案

它们可以是编译器编写者想要的任何大小,前提是它们至少与其前身类型一样大(long int for long long intint for long int) 并满足标准中规定的最小范围。

例如,参见 C11 中的 5.2.4.2 Numerical limits,其中规定了所需的最小范围:

long int
LONG_MIN -2147483647 // −(2^31 − 1)
LONG_MAX +2147483647 // 2^31 − 1
long long int
LLONG_MIN -9223372036854775807 // −(2^63 − 1)
LLONG_MAX +9223372036854775807 // 2^63 − 1

请注意,这些不是您的完整二进制补码范围,因为它们还必须考虑其他两种编码方案,一个的补码和符号幅度,它们都有以下概念负零。

如果你真的想知道,你可以在 limits.h 头文件中查找这些值,或者编译并运行:

#include <stdio.h>
#include <limits.h>

int main (void) {
printf ("BITS/CHAR %d\n", CHAR_BIT);
printf ("CHARS/SHORT %d\n", sizeof(short));
printf ("CHARS/INT %d\n", sizeof(int));
printf ("CHARS/LONG %d\n", sizeof(long));
printf ("CHARS/LLONG %d\n", sizeof(long long));
putchar ('\n');

printf ("SHORT MIN %d\n", SHRT_MIN);
printf ("SHORT MAX %d\n", SHRT_MAX);
printf ("INT MIN %d\n", INT_MIN);
printf ("INT MAX %d\n", INT_MAX);
printf ("LONG MIN %ld\n", LONG_MIN);
printf ("LONG MAX %ld\n", LONG_MAX);
printf ("LLONG MIN %lld\n", LLONG_MIN);
printf ("LLONG MAX %lld\n", LLONG_MAX);
return 0;
}

在我的系统上,一个相当糟糕的标准(并且稍微重新格式化以看起来漂亮):

BITS/CHAR      8
CHARS/SHORT 2
CHARS/INT 4
CHARS/LONG 4
CHARS/LLONG 8

SHORT MIN -32768
SHORT MAX 32767
INT MIN -2147483648
INT MAX 2147483647
LONG MIN -2147483648
LONG MAX 2147483647
LLONG MIN -9223372036854775808
LLONG MAX 9223372036854775807

看起来,在这个系统上,我有二进制补码(负数/正数最后一位的 8/7 不匹配),没有填充位,16 位 short int、32 位 intlong int 以及 64 位 long long int

如果您在自己的环境中运行类似的代码,那应该能够告诉您类似的信息。

关于c - 128位机器中 "long long"的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31911722/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com