在
C/Java/JavaScript等高級語言編寫的程序中, 「數(shù)值」 、 「字符串」 和 「圖像」 在計算機內(nèi)部都是以 「二進制數(shù)值」 的形式來表現(xiàn)的?
用二進制數(shù)表示計算機信息的原因
計算機內(nèi)部是由IC這種電子部件構成的。IC的所有 「引腳」 ,只有 「直流電壓」 0V或5V兩個狀態(tài)。
?也就是說,
IC的一個引腳,「只能表示兩個狀態(tài)」?
IC的這個特性,決定了計算機的信息數(shù)據(jù)只能用二進制數(shù)來處理。由于1位(一個引腳)只能表示兩個狀態(tài),所以二進制的計數(shù)方式就變成了0、1、10、11、100...這種形式。
?計算機處理信息的 「最小單位」 -- 「位」 ,就相當于二進制中的一位。
?

IC的一個引腳表示二進制的1位
二進制的位數(shù)一般是8位、16位、32位···· 「也就是8的倍數(shù)」 ,這是因為計算機所處理的信息的 「基本單位」 是8位二進制數(shù)。8位二進制數(shù)被稱為一個 「字節(jié)」 。
?字節(jié)是最基本的**「信息計量單位」**
?
- 「位」 是最小單位
- 「字節(jié)」 是基本單位
?內(nèi)存和磁盤都使用 「字節(jié)單位」 來存儲和讀寫數(shù)據(jù),使用 「位單位」 則無法讀寫數(shù)據(jù)。
?
用字節(jié)單位處理數(shù)據(jù)時,如果數(shù)字小于存儲數(shù)據(jù)的字節(jié)數(shù)(=二進制數(shù)的位數(shù)),那么高位上就 「用0填補」 。例如,100111這個6位二進制數(shù),用8位(=1字節(jié))表示時為00100111。
在程序中,即使是用 「十進制」 和 「文字」 等記錄信息,在 「編譯」 后也會轉換成二進制的值。

對于用二進制數(shù)表示的信息,計算機不會區(qū)分它是數(shù)值、文字,還是某種圖片的模式,而是 「根據(jù)編寫程序的各位對計算機發(fā)出的指示進行信息的處理」 。
例如,00100111這樣的二進制數(shù),即可以將其當做 「數(shù)值」 做加法運算,也可以當成‘(單引號)文字而顯示在顯示器上。
?具體進行何種處理,取決于**「程序的編寫方式」**
?
什么是二進制
二進制數(shù)的值換成十進制數(shù)的值,只需將二進制的各 「數(shù)位」 的值和 「位權」 相乘,然后將相乘的結果相加即可。

位權
十進制數(shù)39的各個 「數(shù)位」 的數(shù)值,并不只是簡單的3和9。
3表示的是3×10=309表示的是9×1=9
這里的各個 「數(shù)位」 的數(shù)值相乘的10和1就是 「位權」 。數(shù)字的位數(shù)不同,位權也不一樣。
- 第一位(
最右邊的一位)是10的0次冪(=1) - 第二位是
10的1次冪(=10) - 第三位是
10的2次冪(=100) - 以此類推
? 「位權」 的思考方式同樣適用于二進制
?
- 第一位是
2的0次冪(=1) - 第二位是
2的1次冪(=2) - 第三位是
2的2次冪(=4) - 以此類推
「〇〇的xx次冪」 表示位權,
- 其中,十進制數(shù)的情況下
〇〇部分是10,二進制數(shù)的情況下則為2。〇〇被稱為**「基數(shù)」** xx,在任何進制數(shù)中都是**「數(shù)的位數(shù)-1」**- 即第一位是
1-1=0次冪 - 第二位是
2-1=1次冪 - 第三位是
3-1=2次冪
- 即第一位是
?數(shù)值,表示的就是構成數(shù)值的各 「數(shù)位」 的數(shù)值和 「位權」 相乘后相加的結果
?
二進制數(shù)00100111用十進制數(shù)表示的話是39,因為(0×128)+(0×64)+(1×32)+(0×16)+(0×8)+(1×4)+(1×2)+(1×1)= 39
移位運算和乘除運算的關系
和十進制數(shù)一樣, 「四則運算」 同樣也可以使用在二進制數(shù)中,只要注意 「逢二進位」 即可。
移位運算
「移位運算」 指的是將二進制數(shù)值的各數(shù)位進行 「左右移位」 的運算。
移位有 「左移」 (向高位方向)和 「右移」 (向低位方向)兩種。
假設存在如下處理。把變量a中保存的十進制數(shù)值39左移兩位后再將運算結果存儲到變量b中。
a = 39;
b = a<<2;
<<這個運算符表示 「左移」 , 「右移」 時用>>運算符。<<運算符和>>運算符的 「左側」 是 「被移位的值」 , 「右側」 表示要移位的 「位數(shù)」 。
在前面我們介紹過,無論程序中使用的是幾進制,計算機內(nèi)部都會將其準換成二進制數(shù)來處理,因此都能進行 「移位操作」 。
?針對 「左移運算」 ,空出來的低位要進行 「補0操作」 。
?
而右移操作,由于情況特殊,我們后面再做詳細介紹。
此外,移位操作使最高位或最低位 「溢出」 的數(shù)字,直接丟棄就可以了。
下圖,就是上述代碼的運行過程。
? 「移位運算」 就好比使用二進制表示的 「圖片模式」 像霓虹燈一樣 「左右流動」 的樣子
?
補數(shù)
二進制數(shù)中表示 「負數(shù)」 值時,一般會把 「最高位作為符號來使用」 ,因此我們把這個最高位稱為**「符號位」**
- 符號位是
0時表示正數(shù) - 符號位是
1時表示負數(shù)
計算機在做減法運算時,實際上內(nèi)部是在 「加法運算」 。在表示負數(shù)時就需要使用 「二進制的補數(shù)」 。
?補數(shù)就是**「用正數(shù)來表示負數(shù)」**
?
為了能獲取補數(shù),需要**「將二進制數(shù)的各位的數(shù)值全部取反,然后再將結果加1」**
例如,用8位二進制數(shù)表示-1時,只需要求得1,也就是00000001的補數(shù)即可。
- 將各數(shù)位的0取反加1,1取反成0
- 再將取反的結果加1
- 最后轉化成
11111111
圖例如下:
1-1在計算機內(nèi)部是如何實現(xiàn)的
1-1,也就是1+(-1),一眼就能知道答案,結果是0。
通過上文我們得知,-1用二進制表示為11111111。那么,在計算機內(nèi)部計算1-1,就變成了。
00000001 + 11111111
結果確實為0(=00000000)。這個運算過程中出現(xiàn)了 「最高位溢出」 的情況, 「對于溢出的位,計算機會直接忽略掉」 。
即在8位的范圍內(nèi)進行計算時候,100000000這個9位二進制數(shù)就會被認為是00000000這一8位二進制數(shù)。

?補數(shù)求解的變換方法就是**「取反加1」**
?
將二進制數(shù)的值取反加1的結果,和原來的值相加,結果為0
邏輯右移和算術右移的區(qū)別
右移有移位后在最高位補0和補1兩種情況。當二進制數(shù)的值表示 「圖形模式」 而非數(shù)值時候,移位后需要在最高位補0。這就稱為 「邏輯右移」 。

將二進制數(shù)作為 「帶符號的數(shù)值」 進行運算時,移位后要在最高位填充 「移位前」 符號位的值(0或1)。這就稱為 「算術右移」 。
- 如果數(shù)值是用補數(shù)表示的負數(shù)值,那么右移后再空出來的最高位補1
- 如果是正數(shù),只需要在最高位補0即可
?只有在 「右移」 時才必須區(qū)分 「邏輯位移」 和**「算術位移」**
?

?左移時,無論是 「圖形模式」 (
邏輯左移)還是 「相乘運算」 (算術左移),都只需要在空出來的 「低位補0」 即可。?
符號擴充
以8位二進制數(shù)為例, 「符號擴充」 就是指在保存值不變的前提下將其準換成16位和32位的二進制。
不管是正數(shù)還是用補數(shù)表示的負數(shù),都只需要 「用符號位的值(0或1)填充高位」 即可。
邏輯運算
在運算中,與邏輯相對的術語是算術。
- 將二進制數(shù)表示的信息作為 「四則運算」 的數(shù)值來處理就是**「算術」**
- 像圖形模式,將數(shù)值處理為單純的
0和1的羅列就是**「邏輯」**
計算機能處理的運算,大體可分為 「算術運算」 和 「邏輯運算」 。
- 「算術運算」 是指加減乘除四則運算
- 「邏輯運算」 是指對二進制數(shù) 「各數(shù)字位的
0和1分別進行處理」 的運算- 邏輯 「非」 (
NOT運算) - 邏輯 「與」 (
AND運算) - 邏輯 「或」 (
OR運行) - 邏輯 「異或」 (
XOR運算)
- 邏輯 「非」 (
「邏輯非」 是指的是0變成1、1變成0的取反操作。
「邏輯與」 指的是”兩個都是1“時,運算結果為1,其他情況下運算結果都為0的運算。

邏輯與的真值表
「邏輯或」 指的是”至少有一方是1“時,運算結果為1,其他情況下運算結果都是0的運算

邏輯或的真值表
「邏輯異或」 指的是排斥相同數(shù)值的運算。“兩個數(shù)值不同”,也就是說,當“其中一方是1,另一方是0“時運算結果是1,其他情況下結果都是0.

邏輯異或的真值表
?在進行邏輯運算時,都是對相對應的 「各數(shù)位」 分別進行運算
?
「大家不要把二進制數(shù)表示的值當作數(shù)值,而應該把它看作是圖形或者開關上的ON/OFF」 。并且, 「邏輯運算」 的運算對象不是數(shù)值,因此不會出現(xiàn)進位的情況。
下圖表示的是對NI的兩個字母的圖形模式進行各種 「邏輯運算」 后的結果。假設白色部分表示1,黑色部分表示0.
-
二進制
+關注
關注
2文章
808瀏覽量
42740 -
計算機
+關注
關注
19文章
7732瀏覽量
92482 -
JAVA
+關注
關注
20文章
2993瀏覽量
115284 -
字符串
+關注
關注
1文章
594瀏覽量
22971 -
javascript
+關注
關注
0文章
525瀏覽量
55827
發(fā)布評論請先 登錄
計算機為什么使用二進制來表達
為什么計算機內(nèi)部進行二進制運算,而不是十進制運算?
二進制數(shù)的運算及加法電路
二進制編碼和二進制數(shù)據(jù)
二進制如何轉換為十進制?
二進制數(shù)據(jù)及取值范圍的計算方法

計算機基礎知識之二進制
評論