`int` 总是有符号的吗?

Is `int` always signed?

我一直认为在C中,int代表signed int;但我听说这种行为是特定于平台的,在某些平台中,int 默认为 unsigned。是真的吗?标准是怎么说的,它是否随着时间的推移而演变?

你说的很对。根据 C11(最新的 标准),章节 §6.7.2

  • int, signed, or signed int

被归类为相同的 type(确切地说是类型说明符)。因此,intsigned int 相同。

此外,从第 6.2.5/P4 章再次重申相同内容

There are five standard signed integer types, designated as signed char, short int, int, long int, and long long int. (These and other types may be designated in several additional ways, as described in 6.7.2.) [....]

因此,对于任何符合标准的环境,int 代表 signed int,反之亦然。

根据 this 维基百科文章,int 是一种有符号整数数据类型,其大小至少为 16 位。

intsignedsigned int都是同一类型。

int 的确切形式是 实现特定的;范围必须至少为 -32767 到 +32767。范围没有上限。另请注意,补码方案 也可能有所不同:如今 2 的补码很常见,尽管也允许 1 的补码和带符号的幅度。