[英]Bits and bytes filling
以某種形式編寫代碼:
int i = 0xFF;
並且知道我的系統中int類型有4個字節,是否存在一種標准方法來預測那些丟失的位將如何填充到i變量中,因此它將始終填充為:
為0xFFFFFFFF
要么
0xFF000000
也就是說,上面的示例與以下事實有關:我們是否可以預測其余位是否將填充零或一?
另一個問題是,是否有辦法知道它是從背面填充還是從正面填充:
0xFF000000 // <<-位填充在后面或
0x000000FF // <<-從前面填充的位
其余位將始終為0。 當存儲到內存中時,它將表示為FF 00 00 00
或00 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.