簡體   English   中英

位和字節填充

[英]Bits and bytes filling

以某種形式編寫代碼:

int i = 0xFF;

並且知道我的系統中int類型有4個字節,是否存在一種標准方法來預測那些丟失的位將如何填充到i變量中,因此它將始終填充為:
為0xFFFFFFFF
要么
0xFF000000
也就是說,上面的示例與以下事實有關:我們是否可以預測其余位是否將填充零或一?

另一個問題是,是否有辦法知道它是從背面填充還是從正面填充:
0xFF000000 // <<-位填充在后面或
0x000000FF // <<-從前面填充的位

其余位將始終為0。 當存儲到內存中時,它將表示為FF 00 00 0000 00 00 FF這取決於機器的耐久性。

第一個是低位字節序FF 00 00 00通常由Intel機器使用,盡管Toby Speight在評論中指出,IA-64體系結構可以配置為使用任一布局。

第二個例子是big-endian。 00 00 00 FF

int i = 0xFF; 使用4字節整數的FF填充1字節,使用00填充其他3字節。

char i = 0xFF; 另一方面(帶1個字節的char)用FF填充1個字節,並且您不保證接下來的3個字節是什么(它們的值,也不能將它們用於其他變量等)。

字節方向

FF 00 00 00
00 00 00 FF

稱為CPU的“固有性”(操作系統,編譯器等以與之匹配的方式制造)。 今天的“普通”計算機是“小端”的,即FF 00 00 00 ,而在移動電話等設備中則存在大端。
但是,您不會直接在程序中注意到字節序:如果將int與此值進行比較,它將等於00 00 00 FF ,這在數學上是正確的(或者說是相反的方向:當您在自己的程序中寫000000FF時源文件,編譯器會對其進行更改,實際上您正在將int值與FF 00 00 00進行比較)。 為了獲得“真實”表示,必須轉換為字節/字符指針並分別訪問4個字節。

int i = 0xFF;

相當於

int i = 255;

哪一位等同於

0x000000FF

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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