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,是這兩個數值相等的必要充分條件,可以作爲判斷兩個變量是否相等的條件。