特性
1、如果一個二進制數(整型)數的第零位的值是1,那么這個數就是
奇數;而如果該位是0,那么這個數就是
偶數。
2、如果一個二進制數的低端n位都是零,那么這個數可以被2n
整除。
3、如果一個二進制數的第n位是一,而其他各位都是零,那么這個數等於2^n。
4、如果一個二進制數的第零位到第n - 1位都是1,而且其他各位都是0,那么這個數等於2^n - 1。
5、將一個二進制數的所有位左移移位的結果是將該數乘以二。
6、將一個無符號二進制數的所有位右移一位的結果等效於該數除以二(這對有符號數不適用)。
餘數會被下捨入(rounddown)
7、將兩個n位的二進制數相乘可能會需要2*n位來保存結果。
8、將兩個n位的二進制數相加或者相減絕不會需要多於n 1位來保存結果。
9、將一個二進制數的所有位取反(就是將所有的一改為零,所有的零改為一)等效於將該數取負(改變符號)再將結果減一。
10、將任意給定個數的位表示的最大無符號二進制數加一的結果永遠是零。
11、零遞減(減一)的結果永遠是某個給定個數的位表示的最大無符號二進制數。
12、n位可以表示2n個不同的組合。
13、數2年包含n位,所有位都是一。
運算
下面分別予以介紹。
二進制數的四則運算
二進制數與十進制數一樣,同樣可以進行加、減、乘、除四則運算。其算法規則如下:
加運算:0+0=0,0+1=1,1+0=1,1+1=10,(逢2進1);
減運算:1-1=0,1-0=1,0-0=0,0-1=1,(向高位借1當2);
乘運算:0×0=0,0×1=0,1×0=0,1×1=1,(只有同時為“1”時結果才為“1”);
除運算:二進制數只有兩個數(0,1),因此它的商是1或0。
減法0-0=0,1-0=1,1-1=0,0-1=-1,10100-1010=1010
加法
如下:
(1)首先是最右數碼位相加。這裡
加數和被加數的最後一位分別為“0”和“1”,根據
加法原則可以知道,相加後為“1”。
(2)再進行倒數第二位相加。這裡
加數和被加數的倒數第二位都為“1”,根據
加法原則可以知道,相加後為“(10)2”,此時把後面的“0”留下,而把第一位的“1”向高一位進“1”。
(3)再進行倒數第三位相加。這裡
加數和被加數的倒數第二位都為“0”,根據
加法原則可以知道,本來結果應為“0”,但倒數第二位已向這位進“1”了,相當於要加“被加數”、“加數”和“進位”這三個數的這個數碼位,所以結果應為0 1=1。
(4)最後最高位相加。這裡
加數和被加數的最高位都為“1”,根據加法原則可以知道,相加後為“(10)2”。一位只能有一個數字,所以需要再向前進“1”,本身位留下“0”,這樣該位相加後就得到“0”,而新的最高位為“1
減法
(1)首先最後一位向倒數第二位借“1”,相當於得到了(10)2,也就是相當於十進制數中的2,用2減去1得1。
(2)再計算倒數第二位,因為該位同樣為“0”,不及
減數“1”大,需要繼續向倒數第三位借“1”(同樣是借“1”當“2”),但因為它在上一步中已借給了最後一位“1”(此時是真實的“1”),則倒數第二位為1,與減數“1”相減後得到“0”。
(3)用同樣的方法倒數第三位要向它們的上一位借“1”(同樣是當“2”),但同樣已向它的下一位(倒數第二位)借給“1”(此時也是真實的“1”),所以最終得值也為“0”。
(4)
被減數的倒數第四位儘管與前面的幾位一樣,也為“0”,但它所對應的減數倒數第四位卻為“0”,而不是前面幾位中對應的“1”,它向它的高位(倒數第五位)借“1”(相當於“2”)後,在借給了倒數第四位“1”(真實的“1”)後,仍有“1”余,1 –0=1,所以該位結果為“1”。
(5)
被減數的倒數第五位原來為“1”,但它借給了倒數第四位,所以最後為“0”,而此時減數的倒數第五位卻為“1”,這樣被減數需要繼續向它的高位(倒數第六位)借“1”(相當於“2”),2–1=1。
(6)
被減數的最後一位本來為“1”,可是借給倒數第五位後就為“0”了,而減數沒有這個位,這樣結果也就是被減數的相應位值大小,此處為“0”。
在二進制數的加、
減法運算中一定要聯繫上
十進制數的加、減法運算方法,其實它們的道理是一樣的,也是一一對應的。在
十進制數的加法中,進“1”仍就當“1”,在二進制數中也是進“1”當“1”。在
十進制數減法中我們向高位借“1”當“10”,在二進制數中就是借“1”當“2”。而被借的數仍然只是減少了“1”,這與十進制數一樣。
乘法
把二進制數中的“0”和“1”全部當成是
十進制數中的“0”和“1”即可。根據
十進制數中的乘法運算知道,任何數與“0”相乘所得的積均為“0”,這一點同樣適用於二進制數的乘法運算。只有“1”與“1”相乘才等於“1”。乘法運算步驟:
(1)首先是乘數的最低位與
被乘數的所有位相乘,因為乘數的最低位為“0”,根據以上原則可以得出,它與被乘數(1110)2的所有位相乘後的結果都為“0”。
(2)再是乘數的倒數第二位與
被乘數的所有位相乘,因為乘數的這一位為“1”,根據以上原則可以得出,它與被乘數(1110)2的高三位相乘後的結果都為“1”,而於最低位相乘後的結果為“0”。
(3)再是乘數的倒數第三位與
被乘數的所有位相乘,同樣因為乘數的這一位為“1”,處理方法與結果都與上一步的倒數第二位一樣,不再贅述。
(4)最後是乘數的最高位與
被乘數的所有位相乘,因為乘數的這一位為“0”,所以與被乘數(1110)2的所有位相乘後的結果都為“0”。
(5)然後再按照前面介紹的二進制數加法原則對以上四步所得的結果按位相加(與
十進制數的乘法運算方法一樣),結果得到(1110)2×(0110)2=(1010100)2。
除法
(1)首先用“1”作為商試一下,相當於用“1”乘以除數“110”,然後把所得到的各位再與
被除數的前4位“1001”相減。按照減法運算規則可以得到的餘數為“011”。
(2)因為“011”與
除數“110”相比,不足以被除,所以需要向低取一位,最終得到“0111”,此時的數就比除數“110”大了,可以繼續除了。同樣用“1”作為商去除,相當於用“1”去乘除數“110”,然後把所得的積與被除數中當前四位“0111”相減。根據以上介紹的
減法運算規則可以得到此步的餘數為“1”。
(3)因為“1”要遠比除數“110”小,
被除數向前取一位後為“11”,仍不夠“110”除,所以此時需在商位置上用“0”作為商了。
(4)然後在
被除數上繼續向前取一位,得到“110”。此時恰好與
除數“110”完全一樣,結果當然是用“1”作為商,用它乘以除數“110”後再與被除數相減,得到的餘數正好為“0”。證明這兩個數能夠整除。
這樣一來,所得的商(1101)2就是兩者相除的結果。
ASCII碼
ASCII碼就是被普遍採用的一個英文字元信息編碼方案,它用8位二進制數表示各種字母和符號,例如:
01000001表示A 01000010表示B
8個二進制位稱為一個位元組(Byte,代號為B)。位元組是最基本的信息儲存單位,一個位元組可以儲存一個英文字母或符號編碼,兩個位元組可以儲存一個漢字編碼。
同二進制數一樣,二進制編碼也是計算機內部用來表示信息的一種手段,人們平時和計算機打交道時,根本不用理它。我們仍然用人們習慣的方式輸入或者輸出信息,期間的轉換則由計算機自動去完成。
計算機中一個存儲單位(即一個位元組)里存放的究竟是二進制數還是二進制編碼?是英文是漢字?事實上它們都由程式進行識別。例如,表示英文字元的8位二進制編碼的最高位是0,而表示漢字兩個8位二進制編碼的最高位是1,這一點就是程式區別存儲單位里存放的是英文還是漢字的一個依據。
漢字編碼
1980年中國為6763個常用漢字規定了編碼,稱為《信息交換用漢字編碼字元集·基本集》,簡稱
GB2312-80,每個漢字占16位。在Windows95/98/2000/XP簡體中文版作業系統中,使用的是《漢字內碼擴展規範》,簡稱
GBK,每個漢字占16位,它能表示20902個漢字。Linux簡體中文版作業系統中,使用的是UTF-8編碼,大多數漢字占24位,能表示7萬多個漢字。
實例對照
十進制
| 0
| 1
| 2
| 3
| 4
| 5
| 6
| 7
| 8
| 9
| |
二進制
| 0000
| 0001
| 0010
| 0011
| 0100
| 0101
| 0110
| 0111
| 1000
| 1001
| |
16→10000
46→101110
99→1100011
888→1101111000
7654→1110111100110
注:一般為了區別二進制數與
十進制數,再二進制數後加上一個“B”,如145→10010001B
通常我們所說的數字,一般都是十進制,10分就1角,10角就1元……這些數字只是由十個數組成,那就是:0、1、2、3、4、5、6、7、8、9[我們一般稱之為
基數(base)]
都是這些數,但它們處於不同位置所代表的重量就不一樣了喔,如111,都是1但就是不一樣,這就涉及到了
位權的概念了,可用以下實例來說明。一個
十進制數結4553.87可表示為:
在這個數中,有些相同的數字由於處在不同的位置,它們代表的數值的大小也不同,各位數字所代表的數值的大小是由位權來決定的。位權是一個乘方值,乘方的底數為
進位計數制的基數(本例中為1 0 ),而指數由各位數字在數中的位置來決定。以上的
十進制數中,從左至右各位數字的位權分別為:10
3、10
2、10
1、10º、
、
。一般而言,在進位制中,把一個數中各位數字為1時代表的數值大小稱為位權。如456它們的位權就是當各位為1時的數值大小,456中的4的位權就是10(2),5的位權就是10(1),6的位權就是10(0).
除了位權對於進制記數的另一個重要概念就是基數,基數很好理解,就是
進位計數制中所使用的不同基本符號的個數稱為該計數制的基數,比如十進制就是1.2.3.4.5.6.7.8.9.0這十個數,相對而言二進制就兩個基數:0和1,
八進制就是:0.1.2.3.4.5.6.7,
十六進制就是:0.1.2.3.4.5.6.7.8.9.A.B.C.D.E.F
由上面兩個概念可以得出以下公式:[以下將詳細說名]
N進制的
基數就能表示為:0、1、2、……、N-2、N-1
N進制的權一般可以表示:
[X就是某數在它的
數列中所處位置]
N進制展開成十進制公試:如
十進制:有10個基數:0、1、2、3、4、5、6、7、8、9,逢十進一
八進制:有8個
基數:0、1、2、3、4、5、6、7,逢八進一
十六進制:有16個基數:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,逢十六進一
由於大家從小開始就學習十進制,生活中用途更是廣泛,一種單一的數字思維模式使我們很多人以為就只有這么一種進制數.在以下給大家說說計算機中用得最多的進制數,讓大家開闊思維,不要停留於一成不變的思維模式中。
計算機中用得最多也是CPU唯一能認出的
數制,那就是二進制。計算機是處理信息的機器,信息處理的前提是信息的表示。計算機內信息的表示形式是二進制數字編碼。也就是說,各種類型的信息(數值、文字、
聲音、圖像)必須轉換成
數字量即二進制數字編碼的形式,才能在計算機中進行處理。那怕你移動一下滑鼠,按一下鍵盤,你的每一個動作最後到了CPU那也就只剩0和1了,有時覺得設計計算機的人也太厲害了,就兩個數字就能弄出這么完美的東西來,這就是智慧的結晶,其實說到底了CPU也就幾百條指令而已,在
軟體和系統的層層迭加下讓我們根本就不了解計算機內部是什麼樣?其實沒什麼,就是0和1兩個狀態而已。
採用原因
容易表示
二進制數只有“0”和“1”兩個基本符號,易於用兩種對立的物理狀態表示。例如,可用"1"表示電燈開關的“閉合”狀態,用“0”表示“斷開”狀態;電晶體的導通表示“1”, 截止表示“0”;電容器的充電和放電、電脈衝的有和無、脈衝極性的正與負、電位的高與低等一切有兩種對立穩定狀態的器件都可以表示二進制的“0”和“1”。而
十進制數有10個基本符號(0、1、2、3、4、5、6、7、8、9),要用10種狀態才能表示,要用電子器件實現起來是很困難的。
運算簡單
二進制數的
算術運算特別簡單,
加法和
乘法僅各有3條運算規則( 0+0=0,0+1=1,1+1=10和0×0=0,0×1=0,1×1=1 ),運算時不易出錯。[其實計算機處理
算術運算時都是加法和移位,並沒有乘除法,如11B左移一位就成了110B,11B是十進制的3,而110B是6,看看是不是等於乘二,左移乘,右移就除,哈哈,好玩吧]此外,二進制數的“1”和“0”正好可與
邏輯值“真”和“假”相對應,這樣就為計算機進行邏輯運算提供了方便。
算術運算和邏輯運算是計算機的
基本運算,採用二進制可以簡單方便地進行這兩類運算。
進制轉換
雖然二進制有不少優點,但畢竟我們日常生活中用的都是十進制。為了能在日常生活中使用,就有必要把它轉換為十進制。至於為什麼用八進制和十六進制呢?很簡單,就是因為它是2的
乘方,2
3=8,2
4=16,這樣一來就便於二進制的計算和閱讀。
對於其它
進制轉換為十進制比較簡單,下面舉例說明:在計算機科學中,二進制、八進制、十進制、十六進制有
簡寫,這樣是為了不混淆。十進制一般在末尾加個字母D[一般習慣都不加],二進制加個B,八進制加Q,十六進制加H。
例如:123D、1011B、123Q、AB9H、0.11D、0.11B、0.11Q、0.11H。
而十進制轉換為其它進制就比較難辦了喔,但方法是有的,而且不少方法。在此介紹一種比較常用的,便於大家掌握。
十進制轉換為二進制技巧
只能舉例了,文字說不清的,通常將一個十進制數的整數部分和小數部分分開處理。
(1)將給定的十進制整數除以基數2,餘數便是等值的二進制的最低位。
(2)將上一步的商再除以基數2,餘數便是等值的二進制數的次低位。
(3)重複步驟2,直到最後所得的商等於0為止。各次除得的餘數,便是二進制各位的數,最後一次的餘數是最高位
二進制與八進制十六進制轉換技巧
二進制從最低位開始每三位轉換為十進制即為其對應八進制。
高位不足三位,補零。
同理二進制從最低位開始每四位轉換為十進制即為其對應十六進制。
高位不足四位,補零。
例如 10011002 = 1148 = 4C16