[進位] 0xFF的小心得

因為筆者不是資訊出身,所以對這種基本的資料存儲不是太熟,趁著這次研究資料處理的時候,仔細地做一次研究。

一切都是從0xFF開始的。

首先F代表著16進位,所以你看到FF,就是兩位數的16進位,換算成10進位,就是255。

所以FF=255。

再來要看資料的結構了,1/0這種機械碼,就是一個bit,每一個bit是0或1,8 bits就是1 byte。你把bit、byte、int之類的看成公斤公克之類的單位就知道了:

1 byte = 8 bits
1 char = 1 byte
1 short = 2 byte
1 int = 4 byte

在資料傳輸時,會將真實的數值轉換成bytes,然後把每一位數拆開,收到資料的軟體再去把這些byte合起來。

比方說我們的真實數值可以由short來表示(short範圍: -65535~65535),由於short的格式是兩個byte,我們可以把它拆開成單純的byte,這應該是因為傳輸時不可能顧慮到資料的格式(int, string, UIView, NSString...),所以都用最基本的byte來傳輸。

拆的方法就是用0xFF和AND(&)以及>> (平移)。

AND這個邏輯運算是這樣:1 & 1 = 1,1 & 0 = 0。兩個都是1才會是1。

0xFF代表的十進位數值是255,如果以short表示,就是0000000011111111,最後8 bits是1。

所以任何的short數值,要怎麼分割開他兩個byte?

假設我今天要處理的short數值,已bit來表示,是長這樣:0011001110101010,那我第一次用AND取值:

0011001110101010 & 0000000011111111 =  0000000010101010

耶!成功取出後面8個bits。

那前面八個呢?這時要用>>。

0011001110101010 >> 8 = 0000000000110011

這表示你把每個bit往右移動8個位置,於是,前面8個bits就變成0了。

這時再AND:

0000000000110011 & 0000000011111111 =  0000000000110011

就取出另一部分的byte了。

當你要處理 int格式的數值呢?這時0xFF就變成 00000000000000000000000011111111,因為是4 bytes的資料啊。所以0xFF是端看你要處理怎樣的資料而定。

留言

張貼留言