Single UNIX 或 POSIX 中 sizeof(int) 的保证

发布于 2024-10-09 08:58:09 字数 81 浏览 4 评论 0原文

Single UNIX 或 POSIX 中 int 的大小保证是多少?这确实是一个常见问题解答,但我找不到答案......

What are the size guarantees on int in Single UNIX or POSIX? This sure is a FAQ, but I can't find the answer...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

海风掠过北极光 2024-10-16 08:58:09

有了icecrime的回答,并在我这边进一步搜索,我得到了一个完整的图片:

ANSI C和C99都要求INT_MAX至少为+32767(即2^15-1)。 POSIX 并不止于此。 Single Unix v1 具有相同的保证,而 Single Unix v2 规定最小可接受值为 2 147 483 647(即 2^31-1)。

With icecrime's answer, and a bit further searching on my side, I got a complete picture:

ANSI C and C99 both mandate that INT_MAX be at least +32767 (i.e. 2^15-1). POSIX doesn't go beyong that. Single Unix v1 has the same guarantee, while Single Unix v2 states that the minimum acceptable value is 2 147 483 647 (i.e. 2^31-1).

叫嚣ゝ 2024-10-16 08:58:09

C99 标准按以下方式指定标头 的内容:

它们的实现定义值的大小应等于或更大
(绝对值)与显示的值相同,符号相同。

  • int 类型对象的最小值
    INT_MIN -32767 // -(215 - 1)
  • int 类型对象的最大值
    INT_MAX +32767 // 215 - 1
  • unsigned int 类型对象的最大值
    UINT_MAX 65535 // 216 - 1

int 类型没有表示大小要求。

但是, 标头提供了额外的精确宽度整数类型 int8_tint16_tint32_tint64_t 及其无符号对应项:

typedef 名称 intN_t 指定一个
宽度为 N 的有符号整数类型,无
填充位和二进制补码
表示。因此,int8_t 表示
有符号整数类型,宽度为
正好 8 位。

The C99 standard specifies the content of header <limits.h> in the following way :

Their implementation-defined values shall be equal or greater in magnitude
(absolute value) to those shown, with the same sign.

  • minimum value for an object of type int
    INT_MIN -32767 // -(215 - 1)
  • maximum value for an object of type int
    INT_MAX +32767 // 215 - 1
  • maximum value for an object of type unsigned int
    UINT_MAX 65535 // 216 - 1

There are no size requirements expressed on the int type.

However, the <stdint.h> header offer the additional exact-width integer types int8_t, int16_t, int32_t, int64_t and their unsigned counterpart :

The typedef name intN_t designates a
signed integer type with width N, no
padding bits, and a two’s complement
representation. Thus, int8_t denotes a
signed integer type with a width of
exactly 8 bits
.

生来就爱笑 2024-10-16 08:58:09

POSIX 不涵盖这一点。 ISO C 标准保证类型将能够处理至少一定范围的值,但不保证它们具有特定的大小。

C99 引入的 标头将使您能够访问 int16_t 等类型。

POSIX doesn't cover that. The ISO C standard guarantees that types will be able to handle at least a certain range of values but not that they'll be of a particular size.

The <stdint.h> header introduced with C99 will get you access to types like int16_t that do.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文