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

lar*_*mbr 11 c c99

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

Max*_*kin 14

来自新C标准:

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

...

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


Chr*_*oph 9

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

填充位是用户可访问的无符号整数类型.例如,假设一台机器使用一对16位短路(每个都有自己的符号位)组成一个32位int,short当在这个32位中使用时,忽略低位的符号位int.然后,作为32位signed int,存在填充位(在32位的中间),在确定32位的值20时被忽略signed int.但是,如果将此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
Run Code Online (Sandbox Code Playgroud)

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