gpt4 book ai didi

c++ - 3 字节 int 和 5 字节长?

转载 作者:IT老高 更新时间:2023-10-28 21:43:53 25 4
gpt4 key购买 nike

C 和 C++ 标准是否都允许 sizeof数字类型的不是是2的幂?

已知以下约束:

  • 16 <= CHAR_BIT * sizeof(int) <= CHAR_BIT * sizeof(long)
  • 32 <= CHAR_BIT * sizeof(long) <= CHAR_BIT * sizeof(long long)
  • 还有十几个其他的,在典型的 8 位字节架构上意味着 2 <= sizeof(int) && 4 <= sizeof(long)

这是否意味着 sizeof(int) == 3 && sizeof(long) == 5是一种有效的行为吗?

如果是 - 是否有任何已知的编译器/架构以类似的方式运行?

最佳答案

我认为 3.9.1/2 (C++98) 很好地总结了这一点(紧接着是无符号类型的类似信息):

There are four signed integer types: “signed char”, “short int”, “int”, and “long int.” In this list, each type provides at least as much storage as those preceding it in the list. Plain ints have the natural size suggested by the architecture of the execution environment39) ; the other signed integer types are provided to meet special needs.

基本上我们只知道sizeof(char) == 1并且每个“更大”的类型至少有那么大,int作为架构的“自然”大小(据我所知,“自然”取决于编译器编写者)。我们不知道 CHAR_BIT * sizeof(int) <= 32 之类的东西等等。还要记住 CHAR_BIT也不必是 8。

说三个字节 int 似乎相当安全。和五个字节long将允许用于 native 使用这些尺寸的硬件。但是,我不知道有任何此类硬件/架构。

编辑:正如@Nigel Harper 评论中所指出的,我们确实知道 int必须至少为 16 位和 long至少 32 位以满足范围要求。否则我们没有任何特定的大小限制,除了上面看到的。

关于c++ - 3 字节 int 和 5 字节长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17834838/

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