[英]Are there any existing C implementations having padding bit in (un)signed integer representation?
根據C99,在signed int
或unsigned int
表示中可能有填充位。 所以我想知道還有任何實現有這樣過時的東西嗎?
來自新C標准 :
在某些Cray處理器上,short類型具有32位精度,但保持64位存儲。 Unisys A系列無符號整數類型包含一個填充位,在有符號整數表示中將其視為符號位。
...
Harris / 6計算機使用兩個連續的int類型表示long類型。 這意味着必須忽略其中一個整數的符號位; 它被視為填充位。 int類型的值表示為24位寬,long表示具有一個填充位的47位值。
引用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,但會降低性能。未簽名的算術。
MSP430X架構(德州儀器(TI)的微控制器架構)是一個16位架構(MSP430),擴展到具有20位寄存器的20位地址空間。 該體系結構仍然是字節尋址的,其中一個字節具有8位。 指令通常可以在8,16和20位的數量上運行。
在這種架構上,編譯器可能會選擇將int
設為20位類型。 由於20不是8的倍數,因此在將此類型存儲在存儲器中時必須添加4或12位填充。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.