數(shù)字在計算機表示
首先要把計算機當成外星人的樣子,當我們?nèi)祟愒诮Y(jié)繩計數(shù)的時候,使用0~9進行交流,但是這個外星人只能用0,1兩個數(shù)。


幾個問題
在步入正題之前先問幾個問題就是
32 位是幾個字節(jié) ?
二進制數(shù) 01011100 轉(zhuǎn)換成十進制數(shù)是多少?
?二進制數(shù) 00001111 左移兩位后,會變成原數(shù)的幾倍?
補碼形式表示的 8 位二進制數(shù) 11111111,用十進制數(shù)表示的話是多少?
補碼形式表示的 8 位二進制數(shù) 10101010,用 16 位的二進制數(shù)表示的話是多少?
反轉(zhuǎn)部分圖形模式時,使用的是什么邏輯運算?
其實,每個人的答案都不一樣,沒必要完全按照標準答案,理解就可以了。
4字節(jié)
92
4倍
-1
1111111110101010
XOR運算
為什么用二進制表示
IC (模擬 IC 和數(shù)字 IC 兩種,但在計算機領(lǐng)域常指數(shù)字IC)有幾種不同的形狀,有的像一條黑色蜈蚣,在其兩側(cè)有數(shù)個乃至數(shù)百個引腳;有的則像插花用的針盤,引腳在 IC 內(nèi)部并排排列著。IC 的所有引腳,只有直流電壓 0V 或 5V兩個狀態(tài),CPU引腳有電流流過,值為1,沒有就是0。也就是說,IC 的一個引腳,只能表示兩個狀態(tài)。


IC 的這個特性,決定了計算機的信息數(shù)據(jù)只能用二進制數(shù)來處理。由于 1 位(一個引腳)只能表示兩個狀態(tài),所以二進制的計數(shù)方式就變成了。

計算機處理信息的最小單位——位,就相當于二進制中的一位。位的英文 bit 是二進制數(shù)位(binary digit)的縮寫。
二進制數(shù)的位數(shù)一般是 8 位、16 位、32 位……也就是 8 的倍數(shù),這是因為計算機所處理的信息的基本單位是 8 位二進制數(shù)。8 位二進制數(shù)被稱為一個字節(jié)。字節(jié)是最基本的信息計量單位。位是最小單位,字節(jié)是基本單位。

怎么存儲
用字節(jié)單位處理數(shù)據(jù)時,如果數(shù)字小于存儲數(shù)據(jù)的字節(jié)數(shù),那么高位上就用?0?填補。
程序中,即使是用十進制數(shù)和文字等記述信息,在編譯后也會轉(zhuǎn)換成二進制數(shù)的值,所以,程序運行時計算機內(nèi)部處理的也是用二進制數(shù)表示的信息。

對于用二進制數(shù)表示的信息,計算機不會區(qū)分它是數(shù)值、文字,還是某種圖片的模式等,而是根據(jù)編寫程序的各位對計算機發(fā)出的指 示來進行信息的處理(運算)。
例如 00100111 這樣的二進制數(shù),既可以視為純粹的數(shù)值作加法運算,也可以視為“‘”(單引號,single quotation)文字而顯示在顯示器上,或者視為■■□■■□□□這一圖形模式印刷出來。具體進行何種處理,取決于程序的編寫方式。
數(shù)據(jù)在計算機中數(shù)值一律是以補碼的形式存儲的。
怎么操作
一、補數(shù)加減法
二進制數(shù)中表示負數(shù)值時,一般會把最高位作為符號來使用,因此我們把這個最高位稱為符號位。符號位是?0 表示正數(shù), 1 表示負數(shù)。
那么-1 用 8 位二進制數(shù)來表示的話是什么樣的呢?可能很多人會認為“1 的二進制數(shù)是 00000001,因此-1 就是 10000001”,但這個答案是錯的,正確答案是 11111111。
補數(shù)就是用正數(shù)來表示負數(shù)

為什么是用補數(shù)之后,就可以表示負數(shù)了呢?
先談一下互為相反數(shù)之間的運算。

那結(jié)果不為0的運算使用補碼可以嗎?
你要是不信的話,可以使用“負負得正”的方法進行運算,1111 1011表示-5,他的補碼是0000 0101,如果絕對值相等的話,說明補碼表示就是正確的。

二、移位運算與乘除法

低位要進行補 0,最高位或最低位溢出的數(shù)字,直接丟棄就可以了。
但是右移就沒有那么簡單了,一般分為邏輯右移和算術(shù)右移

三、符號擴充
符號擴充:就是保持值不變的前提下將其轉(zhuǎn)換成 16 位和 32 位的二進制數(shù)

四、邏輯運算
之前三個基本是算術(shù)運算,但是邏輯右移就不是
邏輯運算是指對二進制數(shù)各數(shù)字位的 0 和 1 分別進行處理的運算,包括邏輯非(NOT 運算)、邏輯與(AND 運算)、邏輯或(OR 運算)和邏輯異或(XOR 或 EOR運算 exclusive or)四種

掌握邏輯運算的竅門,就是要摒棄用二進制數(shù)表示數(shù)值這一想法。大家不要把二進制數(shù)表示的值當作是數(shù)值,而應(yīng)該把它看作是圖形或者開關(guān)上的 ON/OFF(1 是 ON,0 是 OFF)。邏輯運算的運算對象不是數(shù)值,因此不會出現(xiàn)進位的情況。

幾個問題
在步入正題之前先問幾個問題就是
二進制數(shù) 0.1,用十進制數(shù)表示的話是多少?
用小數(shù)點后有 3 位的二進制數(shù),能表示十進制數(shù) 0.625 嗎?
?將小數(shù)分為符號、尾數(shù)、基數(shù)、指數(shù) 4 部分進行表現(xiàn)的形式稱為什么?
二進制數(shù)的基數(shù)是多少?
通過把 0 作為數(shù)值范圍的中間值,從而在不使用符號位的情況下來表示負數(shù)的表示方法稱為什么?
10101100.01010011 這個二進制數(shù),用十六進制數(shù)表示的話是多少?
其實,每個人的答案都不一樣,沒必要完全按照標準答案,理解就可以了。
0.5
能表示
浮點數(shù)
2
EXCESS系統(tǒng)表現(xiàn)
AC.53
一個例子開始
首先,先打破一下常識,就是我在學(xué)計算機之前一直都認為一件事就是計算機在計算方面應(yīng)該是比人強的,結(jié)果也是準確的,但是實際上這是錯誤的想法。


二進制表示小數(shù)
首先,先試著將1011.0011轉(zhuǎn)成十進制11.1875

所以計算機會出現(xiàn)運算錯誤,是因為“有一些十進制數(shù)的小數(shù)無法轉(zhuǎn)換成二進制數(shù)”,就像0.1,小數(shù)點后面即使有幾百位也無法表示。
小數(shù)點后 4 位用二進制數(shù)表示的數(shù)值轉(zhuǎn)換成十進制數(shù)是非連貫的(由圖可知二進制小數(shù)只能表示十進制 0.5、0.25、0.125、0.0625 這四個二進制數(shù)小數(shù)點后面的位權(quán)組合)
引入浮點數(shù)
上面的例子可以看出像 1011.0011 這樣帶小數(shù)點的表現(xiàn)形式,完全是紙面上的二進制數(shù)表現(xiàn)形式,在計算機內(nèi)部是無法使用的。所以我們需要引入浮點數(shù)。

很多編程語言中都提供了兩種表示小數(shù)的數(shù)據(jù)類型,分別是雙精度浮點數(shù)(64 位?double類型)和單精度浮點數(shù)(32 位 float類型)來表示全體小數(shù)。
浮點數(shù)組成

計算機內(nèi)部使用的是二進制數(shù),所以基數(shù)自然就是 2,一般不考慮,直接默認。

尾數(shù)部分用的是將小數(shù)點前面的值固定為 1 的正則表達式
正則表達式:按照特定的規(guī)則來表示數(shù)據(jù)的形式,

如果沒有規(guī)則的話,表示一個小數(shù)會很多種,很不方便統(tǒng)一管理。所以規(guī)定“小數(shù)點前面是 0,小數(shù)點后面第 1 位不能是 0”這樣的規(guī)則”表示小數(shù)。

指數(shù)部分用的則是EXCESS 系統(tǒng)表現(xiàn)
EXCESS 系統(tǒng)表現(xiàn):通過將指數(shù)部分表示范圍的中間值設(shè)為 0,使得負數(shù)不需要用符號來表示。

下面舉例來說明。假設(shè)有這樣一個游戲,用1~13(A~K)的撲克牌來表示負數(shù)。這時,我們可以把中間的 7 這張牌當成 0。如果撲克牌 7 是 0,10 就表示+3,3 就表示-4。事實上,這個規(guī)則說的就是 EXCESS 系統(tǒng)。這種方法主要是為了表示負數(shù)時不使用符號位。


這里,符號部分為 0,指數(shù)部分為?01111110,尾數(shù)部分為?10000000000000000000000。
因 為 0.75 是正數(shù),所以符號位是 0。指數(shù)部分的 01111110 是十進制數(shù) 126,用 EXCESS 系統(tǒng)表現(xiàn)就是-1(126-127 = -1)。根據(jù)正則表達式的規(guī)則,小數(shù)點前面的第 1 位是 1,因此尾數(shù)部分 10000000000000000000000 實際上表示的是 1.10000000000000000000000 這個二進制數(shù)。將尾數(shù)部分的二進制數(shù)轉(zhuǎn)換成十進制數(shù),結(jié)果就是(1 ×2 的 0 次冪)+(1 ×2 的-1 次冪)= 1.5。因此,0-01111110-10000000000000000000000 這個單精度浮點數(shù),表示的就是“+ 1.5 ×2 的-1 次冪”。2 的-1 次冪是 0.5,+ 1.5 × 0.5 = + 0.75。正好吻合,結(jié)果正確。

避免計算機計算出錯
一、無視
因為有時一些微小的偏差并不會造成什么問題。
eg:使用計算機設(shè)計工業(yè)制品。將 100 個長 0.1 毫米的零件連接起來后,其長度并非一定要是 10 毫米,10.000002 毫米也沒有任何問題。
二、小數(shù)轉(zhuǎn)換成整數(shù)
計算機在進行小數(shù)計算時可能會出錯,但進行整數(shù)計算(只要不超過可處理的數(shù)值范圍)時一定不會出現(xiàn)問題。進行小數(shù)的計算時可以暫時使用整數(shù),然后再把計算結(jié)果用小數(shù)表示出來即可。
eg:將 0.1 相加 100 次可以轉(zhuǎn)換為將 0.1 擴大 10 倍后再將 1 相加 100 次的計算,最后把結(jié)果除以 10 就可以了。


三、BCD(Binary Coded Decimal)
用4位二進制來表示一位十進制數(shù),因此4位二進制數(shù)表示最大的十進制數(shù)9(1001),只取十六個數(shù)中的十個數(shù)。
如果有建議和看法,可以在文末留言,謝謝。
