二進制知識詳解(理論聯繫實際)

緒言

本知識點可用於彙編語言、常見編程語言(腳本語言/面向對象過程語言/面嚮對象語言/函數式編程語言)、計算機組成原理、密碼學等學科的基礎學習.

20200103 二進制知識

常用換算

20200103 二進制知識
2^10 = 1024 = 10^3
1Word = 2Bytes = 16Bits(字,字節,位/比特)
“逢X進一”
權位,X^i
Binary二進制,B,0-1,2^k
Octal八進制,O,0-7,8^k
Decimal十進制,D,0-9,10^k
Hexadecimal十六進制,H,0-F,,16^k
Eg: 21H = 33D = 41O = 100001B

進制轉換

任意進制轉十進制:“按權展開,相乘求和“”
十進制轉任意進制:整數部分“除基數,取餘數”,小數部分“乘基數,取整數(部分)”
二進制轉八進制:“三位合一”
整數部分自右往左,小數部分從左往右,兩端補齊(整數左補0,小數右補0)
八轉二:“一位拆三”
二轉十六:“四位合一”
十六轉二:“一位拆四”
降冪法:減去權位值,“能減爲1,不能減爲0”
“8421”快速轉化:32,64,128,256

有無符號數

有符號數:
機器字長必定爲2的整數倍,即可能取值爲8,16,32,64
以8位爲例,最左邊第1位是正負符號位,後7位爲數值位
速記結論:後七位權值總和比第八位權值(也就是最左邊的第1位)小1,即
i=0n22i=2n11\sum_{i=0}^{n-2} {2^i} = 2^{n-1}-1,其中n爲機器字長


16位字長機器:2^15 = 32768
有符號數:數值劃分爲負數、0和正數,故2^16 / 2 = 2^15,且0是從正數部分摳出去的,
因而正數範圍比複數範圍少1
n位二進制補碼的表數範圍:2n1-2^{n-1} ~ 2n112^{n-1}-1
無符號整數的表數範圍: 0 ~ 2n2^n
符號位:0表示正,1表示負
原碼:因符號位而有正負之分,0也有正負之分、因此0的表示不唯一
反碼:正數反碼同原碼,負數反碼要數值位取反,符號位不做變動,0的表示也不唯一
補碼:正數補碼同原碼,負數補碼除了最右邊1位不變動,其餘數值位取反,
符號位也不用動,補碼0的表示唯一,都爲完全0值
其他說法:
(1)寫出正數的補碼,“最左邊的符號位由1(負)改0(正)即可”
(2)按位求反,“包括符號位和數值位”
(3)末位加一“逢2進1”
移碼:不論正負,符號位與補碼相反,數值位完全相同

雙符號位

數值溢出問題與雙符號位制:
進位“逢2進1”,溢出
正數前邊補0變雙00,負數前邊補1變雙11
二進制數四則運算:
加:[X+Y] 補碼= [X]補碼+ [Y] 補碼
減:加法化加法,即(此時需要求負數補碼)
[X-Y] 補碼= [X]補碼+ [-Y] 補碼
乘:符號位異或運算,數值位用並行乘法(器)
除:並行除法
規律總結如下:
對於正數:[X] 原碼= [X]反碼+ [X] 補碼
正負0的補碼(或移碼)具有唯一表示,原碼和反碼錶示並不唯一(符號位引起不同)

邏輯運算

又叫按位運算(彙編上等價)
與AND, 標記爲 ^ 或 · “同真才真1”
或OR, 標記爲 ∨ 或 + “同假才假0”
非NOT, 標記爲 ¬ 或 ~ 或 ’ “真假互變”
異或XOR,標記爲 ∀ 或 ㊉ “相異爲真1”
運算優先級:括號最高
NOT 運算符具有最高優先級,然後是 AND 和 OR 運算符
“單運算符優先級要比雙運算符的高”

ASCII碼

常用知識

20200104 補充知識:
‘A’ 65Dec = 41Hex
‘a’ 97Dec = 61Hex
字母大小寫互換:±32
‘0’ 48D = 30H
(space),空格 32D = 20H = 0x20
CR (carriage return),回車 13D = 0DH = 0x0D
LF (NL line feed, new line),換行鍵 11D = 0AH = 0x0A
NUL(null),空字符 0000 0000,0D = 0x00
ESC (escape),換碼(溢出) 0001 1011,27 = 0x1B

總結規律

ASCII碼值由小到大的排列順序:空格字符、數字符、大寫英文字母、小寫英文字母
各國編碼不同:
0–127表示的符號是一樣的,但是128—255段各自相異
字符各異的字符串理論長度爲: 256
中、日、韓等國的象形文字,雙字節字符集:其中漢字爲GB系列(典型如GBK)
在GBK編碼中,不論中英文都是雙字節的
UTF-8爲國際通用編碼:
“外國人訪問GBK網頁要下載中文語言包支持,訪問UTF-8編碼的網頁不出現此類問題”

20200104異或運算

常用結論

1.任何數與0異或 = 自身:00=0,01=1
2.任何數與1異或 = 自身取反:10=1,11=0
3.任何數自我異或 = 重置爲0:11=0,00=0
1用於補充二進制位數,不產生異或運算影響;
2用於按位取反,即位翻轉,經常需要與1相結合使用;
3用於置0/初始化/判等,eg: return ((a ^ b) == 0)
彙編上置0: xor a,a
異或運算不僅可以判等,也可應用於比較大小
3次異或運算實現兩數交換:
a = a^b;//第1個結果爲較大數與較小數之差值
b = b^a;//第2、3個數開始交換原始數值
a = a^b;
a^b = b^a,數學上類似 (a-b)^2 = (b-a)^2,均勻分佈方差=1/12平方值

區分邏輯與按位

(以C/C++爲例)
邏輯運算:邏輯運算即是布爾運算,結果非真(true)即假(false)
一共3個: 與&& 或|| 非!
位運算:用於快速完成運算操作(基於底層二進制)
一共4個: 按位與& 按位或| 按位非~ 按位異或^

判斷奇偶

按位與運算的應用:任何數可跟1按位與實現奇偶數判斷,即
A1=1則爲奇數,A1=0則爲偶數
因爲“0000……0001”使得原數值二進制表示後僅最末尾有實際意義,且“同真才真”

區別與聯繫

(對立統一)
邏輯運算與、邏輯或有短路機制,按位與、按位或不會短路
按位運算符可以用於邏輯運算,但是執行效率更低
邏輯運算用於邏輯判斷,按位運算用於數值運算

後記補充

Markdown插入數學公式辦法

學習鏈接

後記交流

QQ:2636105163
可發郵件,也可加好友
羣聊:956349248

手工碼字,如有錯誤歡迎指正!

2020/01/04 05:53

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