今天的第二更,被我拖到了傍晚,嘿嘿,二進制這方面讓本就數學不好的我很頭疼,所以研究了一段時間
在學習之前我們先了解幾個問題:
32位是幾個字節?
- 01011100對於十進制是多少?
- 00001111向左位移兩位結果是多少?有什么規律?
- 以補碼形式表示的8位二進制數11111111,十進制為多少?
- 二進制和十進制有什么區別?
在學習前肯定會對問題里的一些屬於感到蒙蔽,不要急,按照我寫的一步一步往下看,再回頭看這些問題,就會迎刃而解
為什么要用二進制?
可能有些人不了解我們放着好好地十進制不用為什么要去用一跟零去表達,在上一章(小白的CTF學習之路1——程序與CPU)我們講過,計算機是由各種集成電路(IC)組成的,而集成電路上面呢,他有銀角,銀角只能表達兩種狀態,一種是通電,一種是不通電,那么通電和不通電就用0和1來表示,0代表0負,1代表5負,(cpu內的晶體管與集成電路是一樣的)
二進制是如何表達文字,圖片,視頻和聲音的?
這里我們需要知道二進制都能表示些什么:
- 小數
- 字符
- 數值
- 圖片
- 視頻
- 音頻
小數我們先不用管,字符我們可能比較好理解,我們只需將英文字母26個來乘2(大小寫),再用52個編號來表達52個字符
那么圖片我們是怎樣做到的呢?視頻呢?音頻又是如何做到的呢?
不要急,我們一步一步來看
圖片,我們可以舉個例子,比如我們想表示A這個字母的圖片,我們在一個5X5的格子上,將這個A的形狀用黑點來把格子塗黑,而在二進制中呢,我們是一樣的,在一個5X5的不通電電路中,用通電來表示圖像,這就是我們的點陣法的形象理解,但是,這種方法只能顯示黑或白,我們看的圖片肯定不是黑白的啊,這怎么辦呢?我們可以在此之上,再加上一個表,每個格里面代表一個顏色,這樣,我們就很好的解決了顏色的問題,我們常說的8位色,32位色等就是這個意思(8位色可以表示6萬多種顏色)
圖片我們了解了,視頻就相對簡單了,視頻比圖片多了一個叫做軌道的東西,一幀一幀的播放圖片
那么怎么表達音頻呢?音頻是通過采樣形成高低波的點,將結果形成一個形式
這就是我們二進制能夠表達的東西及原理
以下內容涉及到運算部分
一:二進制和十進制的轉換
十進制:逢十進一
二進制:逢二進一
下面是0-5的二進制轉換,下面以此類推
- 0;0
- 1;1
- 2;10
- 3;11
- 4;100
- 5;101
具體是怎么運算的呢?可以參考我下面的圖片
二:進制的運算(難點)
十進制運算:加減乘除
二進制運算同樣可以進行加減乘除
- 00111+01000=01111
- 0010011+0010011=0100110
注意逢二進一
二進制減法
二進制當中沒有減,只能通過加法來實現
例如:十進制10-5=10+(-5)
二進制:1101-0011=1010
依然是逢二進一的逆運算,簡單吧,但是計算機是如何做的呢?
1101+(-0011)
那么我們就出現了一個問題:二進制如何表示負數?
我們知道,計算機里有銀角,每個銀角存一個二進制的值,那么表示負數我們就規定一個長度(8位,16位,32位),拿它最前面的表示符號,0代表正,1代表負,這樣一來,我們的首位代表標志位
我們現在表示了負數,但是我們依舊還是無法用於運算,因為計算機無法理解,這里我們便引入了一個補數的概念
例如:1=0001
補數:取反=1110
+1=1111
1111這個值就代表我們的-1
這里我們需要注意一下,我們需要事先規定好數值的范圍,上面的例子的范圍就是4,超過4位的計算機就會舍棄,我們的長度規定有:8位,16位,32位,64位
這樣我們的補數就可以用於二進制減法運算了
二:二進制的乘或除
左移運算是代表乘法,例如:0001=1X4,左移兩位,0100=4,0011=3X2,左移一位0110=6
由此得出結論:每左移幾位=X幾個2
右移運算代表除法
我們上面的左移運算是用0來補全
0100=4/2,右移一位,0010=2
這樣運算ok沒問題
但是如果是這種情況:
1000 0000=-128
右移二位
1110 0000=-32
當進行補碼后的右移需要把首位跟着它一起右移過去
再舉個栗子:
10011100=-100
右移二位
11100111=-25
這樣一來,我們的二進制除法工作就已經完成了,右移分為兩種,一個是邏輯右移:作為正整數的除,一個是算術右移:根據首位決定補0或1
有人會問,既然算術右移可以實現全部的運算,為什么還要進行邏輯右移呢?我們的邏輯右移可以用來表示整體右移,例如,單片機內的點陣跑馬燈,用於動態視頻等操作
除了邏輯右移,還有邏輯非,邏輯與,邏輯或,邏輯異或等比較容易的運算
邏輯非就是取反,邏輯與是10得0,11得1,邏輯或是10得1,邏輯異或是10=1,與我們高中學的數學知識差不多
未完待續...