根据C99,可能有填充位signed int 或unsigned int表示.所以我想知道还有任何实现有这样过时的东西吗?
引用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,但对无符号算术会产生性能损失.