前面說道,2進制(因為bit,中文比特),也就是1和0組成的數字,每8個比特為1個字節(英文叫做byte).
在電腦中比特必須按照字節的方式對齊,也就是說,不可能出現內存中一段數據只有1比特這樣的情況,一次性操作的數據最少為1個字節,也就是8個比特.從這方面來看,字節才算是電腦中的最小數據單位.
在電腦里,幾乎一切東西右數字構成.由字節為基本單位.我們以字節方式查看一下圖片音樂之類的文件看看吧:
這里,介紹一個工具,WinHEX,相信很多人都已經認識了.照顧一下不認識的同學,在這里隨便講講......
#WINHEX.rar
啟動WinHEX:
我用WinHEX打開了一個PNG圖片文件.
最上邊灰色那里,是顯示你打開的文件的文件名.已經打開了一個PNG文件.
白色區的offset豎排(也就是那些8個16進制數字排列在一起的那一框)為當前行第一個字節的偏移地址呢?偏移地址,是一個字節的距離第一個字節的長度 (以字節為單位).順帶一提,在電腦里有些東西的統計是以0開始的,我們生活中數數是1...2...3但是在電腦中有時是從0開始的,0...1...2...3學過高級語言的可能已經習慣了,高手的代碼里經常出現把某某數字加1或者減1就是為了這樣.
這樣,我們的第一個字節的偏移為0.偏移豎排表示了第一個字節的偏移,偏移橫排則可以確定每個字節的偏移.
算法:
當前行的偏移豎排處的數值+你要計算的那個字節在偏移橫排對應的值=你要計算的那個字節的偏移
比如:第3行第7個字節.
第3行偏移豎排處的值為00000020偏移橫排值為6(為什么第7個數字的橫排值會是6?沒搞錯喲,記得前面說的從0開始嗎?從0開始計算,第7個字節為6喲!以后會經常出現這樣的情況,匯編學久了就習慣了)
加起來就是26H(注意:16進制的喲!)
最右邊就是ASCII解碼了,什么是ASCII呢?那是一種只有英文字母,數字,標點符號的文本編碼(文本編碼:用數字表示字符.)正常的ASCII只有一個字節,最右邊就是對ASCII進行解析的區域,它能解析出這個字節和哪個字符的ASCII碼相同,并顯示出那個字符,如果那個字節沒有對應的字符則顯示小數點.
好了,關于WinHEX的講解就到這里了.繼續講數據單位.
之前說到,從某種意義上來說字節才是最小的單位.接著說說比字節大的單位.
字 (WORD),1個字型數據有2個字節,在文本編碼中,word才是表示一個字符的最佳單位.因為字節(byte)只能表示0-255之間的數字(用計算器把2進制的8個1轉換成10進制看看)而就拿中文來說吧.幾千個中文,最大才255的字節型怎么夠呢?所以,用字形(WORD)有16位2進制=65536(最大值65535,但是,從0開始啊!別把0丟了)種可能幾千個中文完全夠用了.所以中文編碼正常的是用2個字節(也就是"字"表示一個文字),可以做一個實驗:用記事本輸入一個中文,然后保存下來,用WinHEX打開看看.
然后就是雙字(DWORD)了,顧名思義,就是2個字形數據合一起,有32比特,可能有人已經想到了,32位系統能一次性計算一個雙字數據,但是不要想成雙字是 32位系統獨有的呀,曾經的16位MS-DOS系統也是能有雙字型數據的喲!所謂字和雙字只是邏輯上的.完全能把字形數據當作2個排列在一起的字節看待, 雙字也是,可以當作是4個字節看待.
.這些都是小單位.說說大點的單位吧.
KB,在某些地方是1000字節的意思,但大多數時候是指1024個字節
MB,代表1000KB或1024KB(大多數代表1024KB)
GB,1000MB或1024MB
TB,1000GB或1024GB(TB可是寫這教程的最近幾年才開始使用的...似乎很多人都還不知道有這個單位呢,,)
在大家買手機記憶卡的時候是不是有出現過明明買的2G的卡,打開一看只有1.8G呢?實際上這是算法不同造成的.看到這里,大家都知道從KB開始,數據有 1000和1024這2種進制.廠家用的就是1000進制而我們用的就是1024進制,所以,我們看到的記憶卡容量通常比卡上表示的小.按照以上方法,計算一下,你會發現,你買的卡的空間不但沒有小于卡上面寫的,反而還大了一點呢!