程序員的數學-1


1.二進制

1.1二進制是什麼?怎麼表示2進制?二進制與十進制的轉換?

首先看下10進制:
要表示一個數字6871,用十進制:
6  8  7  1  =  6 * 1000 + 8 * 100 + 7 * 10 + 1
千 百 十 個
                =  6 * 10^3 + 8 * 10^2 + 7 * 10^1 + 1 * 10^0

其中^表示冪或次方運算。十進制的數位(千位、百位、十位等)全部都是10^n的形式。
在這個新的表示式裏,10被稱爲十進制計數法的基數,也是十進制中“十”的由來。

再看2進制:
十進制計數是使用10作爲基數,那麼二進制就是使用2作爲基數,二進制的數位就是2^n的形式。

二進制數字110101,轉成易於理解的10進制:
1*2^5 + 1*2^4 + 0*2^3 + 1*2^2 + 0*2^1 + 1*2^0
=32    +  16     +  8       +  4       +  2       +   1
=53


1.2計算機爲什麼使用二進制
計算機使用二進制和現代計算機系統的硬件實現有關。
組成計算機系統的邏輯電路通常只有兩個狀態,即開關的接通與斷開。

斷開的狀態我們用“0”來表示,接通的狀態用“1”來表示。
由於每位數據只有斷開與接通兩種狀態,所以即便系統受到一定程度的干擾時,它仍然能夠可靠地分辨出數字是“0”還是“1”。
因此,在具體的系統實現中,二進制的數據表達具有抗干擾能力強、可靠性高的優點。

另外,二進制也非常適合邏輯運算。邏輯運算中的“真”和“假”,正好與二進制的“0”和“1”兩個數字相對應。
邏輯運算中的加法(“或”運算)、乘法(“與”運算)以及否定(“非”運算)都可以通過“0”和“1”的加法、乘法和減法來實現。


1.3二進制的位操作
1.3.1向左移位
二進制110101向左移一位,就是在末尾添加一位0,因此110101就變成了1101010。

如果將1101010換算爲十進制,就是106,106正好是53的2倍。
所以,我們可以得出一個結論:
二進制左移一位,其實就是將數字翻倍。


1.3.2向右移位
二進制110101向右移一位,就是去除末尾的那一位,因此110101就變成了11010。

將11010換算爲十進制,就是26,正好是53除以2的整數商。
所以:
二進制右移一位,就是將數字除以2並求整數商的操作。


1.3.2位的“或”
二進制的“1”和“0”分別對應邏輯中的“真”和“假”,因此可以針對位進行邏輯操作。

邏輯“或”的意思是,參與操作的位中只要有一個位是1,那麼最終結果就是1,也就是“真”。

如果我們將二進制110101和100011的每一位對齊,進行按位的“或”操作,就會得到110111。
如:
1 1 0 1 0 1
1 0 0 0 1 1
1 1 0 1 1 1


1.3.3位的“與”
“與”的意思是,參與操作的位中必須全都是1,那麼最終結果纔是1(真),否則就爲0(假)。

如果我們將二進制110101和100011的每一位對齊,進行按位的“與”操作,就會得到100001。
如:
1 1 0 1 0 1
1 0 0 0 1 1
1 0 0 0 0 1


1.3.4位的“異或”
邏輯“異或”和“或”有所不同,它具有排異性,也就是說如果參與操作的位相同,那麼最終結果就爲0(假),否則爲1(真)。

將二進制110101和100011的每一位對齊,進行按位的“異或”操作,可以得到結果是10110。
如:
1 1 0 1 0 1
1 0 0 0 1 1
0 1 0 1 1 0

兩個數值按位“異或”結果爲0,是這兩個數值相等的必要充分條件,可以作爲判斷兩個變量是否相等的條件。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章