是否有任何现有的C实现在(un)有符号整数表示中具有填充位?

根据C99,在signed intunsigned int表示中可能有填充位。 所以我想知道还有任何实现有这样过时的东西吗?

引用C99基本原理( PDF )第6.2.6.2节§20:

填充位是用户可访问的无符号整数类型。 例如,假设一台机器使用一对16位短路(每个都有自己的符号位)来构成一个32位的int并且当在这个32位int使用时,忽略较低short的符号位。 然后,作为32位signed int ,在确定32位signed int的值20时,将忽略一个填充位(在32位的中间)。 但是,如果将此32位项目视为32位unsigned int ,则该填充位对用户程序可见。 C委员会被告知有一台机器以这种方式工作,这就是填充位被添加到C99的一个原因。

所以这样的事情至少确实存在。

至于今天仍然存在的奇怪架构,其中的例子是UNIVAC 1100/2200系列及其奇怪的数据格式 。

虽然它不使用整数填充,但是看看它们的C编译器手册( PDF )仍然具有指导意义:

 Table 4–4. Size and Range of Unsigned Integer Types Type Size Range unsigned short int 18 bits 0 to (2^18)–1 unsigned short unsigned int 36 bits 0 to (2^36)–2 (see the following note) unsigned unsigned long int 36 bits 0 to (2^36)–2 (see the following note) unsigned long 

第二卷( PDF )解释了如何使用CONFORMANCE/TWOSARITH编译器关键字来控制负零的解释:这会将无符号整数类型的范围调整为预期的(2 ^ 36)-1,但会降低性能。未签名的算术。

来自新C标准 :

在某些Cray处理器上,short类型具有32位精度,但保存在64位存储器中。 Unisys A系列无符号整数类型包含一个填充位,在有符号整数表示中将其视为符号位。

Harris / 6计算机使用两个连续的int类型表示long类型。 这意味着必须忽略其中一个整数的符号位; 它被视为填充位。 int类型的值表示为24位宽,long表示具有一个填充位的47位值。

MSP430X架构(德州仪器(TI)的微控制器架构)是一个16位架构(MSP430),扩展到具有20位寄存器的20位地址空间。 该体系结构仍然是字节寻址的,其中一个字节具有8位。 指令通常可以在8,16和20位的数量上运行。

在此体系结构中,编译器可能会选择将int为20位类型。 由于20不是8的倍数,因此在将此类型存储在存储器中时必须添加4或12位填充。