簡體   English   中英

是否有任何現有的C實現在(un)有符號整數表示中具有填充位?

[英]Are there any existing C implementations having padding bit in (un)signed integer representation?

根據C99,在signed intunsigned 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM