在之前我們已經看過了簡單的數字和操作。在本文中,將學習數字在計算機內部是如何工作的。
更詳細:雖然這不是在 web 應用程序或大多數桌麵應用程序直接有用的,但是知道這些是非常有用的。如果你不隻關心這一點,可以跳到下一個教學學習。在本文中,將學習在 Python 中如何使用二進製數,如何將它們轉換為小數,怎麼做位操作運算等。
二進製數字
在最低水平,計算機對任何數字無概念,除了'有一個信號“或”這些不是一個信號“。也可以認為這是一個電燈開關:要麼在開關打開,要麼關閉。這個微小的信息,一台電腦存儲的最小量,被稱為一個比特。表示一個比特位或低(0)或高(1)。
為了表示大於 1 的更高數字,這個想法誕生了使用比特序列。八位的序列可以存儲更大的數字,這被稱為一個字節。序列由1和0組成被稱為:二進製。傳統計數係統十位數字被稱為十進製。
讓我們來看看,在實踐的例子中:
# Prints out a few binary numbers. print int('00', 2) print int('01', 2) print int('10', 2) print int('11', 2)
第二個參數2,告訴Python中我們有一批基於2個元素(1和0)。要轉換一個字節(8位)為十進製,簡單的寫了八位在第一個參數的組合。
# Prints out a few binary numbers. print int('00000010', 2) # outputs 2 print int('00000011', 2) # outputs 3 print int('00010001', 2) # outputs 17 print int('11111111', 2) # outputs 255
計算機如何做到這一點?每隔數位(從右到左)乘以2的冪。
數字 ‘00010001‘ 就是 (1 x 2^0) + (0 x 2^1) + (0 x 2^2) + (0 x 2^3) + (1 x 2^4) + (0 x 2^5) + (0 x 2^6) + (0 x 2^7) = 16 + 1 = 17. 請記住,由右至左讀。
數字 ‘00110010’ 也就是 (0 x 2^0) + (1 x 2^1) + (0 x 2^2) + (0 x 2^3) + (1 x 2^4) + (1 x 2^5) + (0 x 2^6) + (0 x 2^7) = 32+16+2 = 50.
自己嘗試序列'00101010',看看你是否了解和在Python程序中驗證。
使用二進製數的邏輯運算
二進製左移和二進製右移
乘法由兩個因素的因子2和除法在二進製中很容易。我們隻是轉移向左或向右位。我們左移如下:
Bit 4 | Bit 3 | Bit2 | Bit 1 |
---|---|---|---|
0 | 1 | 0 | 1 |
1 | 0 | 1 | 0 |
在移(0,1,0,1)之前,數字為:5。移動(1,0,1,0)之後,數字為:10。在 Python 中,可以使用按位向左符(<<)轉向左,右位運算符(>>)右移。
inputA = int('0101',2) print "Before shifting " + str(inputA) + " " + bin(inputA) print "After shifting in binary: " + bin(inputA << 1) print "After shifting in decimal: " + str(inputA << 1)
結果輸出:
Before shifting 5 0b101 After shifting in binary: 0b1010 After shifting in decimal: 10
AND運算符
鑒於兩個輸入,電腦就可以做一些邏輯與位運算。讓我們使用 AND運營符。如果輸入A和B是正的,輸出將是正的。我們將展示AND運算以圖形方式,兩個左邊作為輸入A和B,正確的圓是輸出:在這個代碼很簡單,隻要使用&符號,它代表了邏輯與運營符。
# This code will execute a bitwise logical AND. Both inputA and inputB are bits. inputA = 1 inputB = 1 print inputA & inputB # Bitwise AND
通過改變輸入後有相同的結果,使用上麵的圖像。我們可以與操作符在序列上:
inputA = int('00100011',2) # define binary sequence inputA inputB = int('00101101',2) # define binary sequence inputB print bin(inputA & inputB) # logical AND on inputA and inputB and output in binary
結果如下:
0b100001 # equals 00100001
這是有道理的,因為如果做了以上運算:
00100011 00101101 -------- Logical bitwise AND 00100001
OR 運算符
現在,我們已經學會了AND運算符,讓我們一起來看看 OR運算符。給定兩個輸入,輸出將為零隻有當A和B均為0。要執行它,我們使用|運算。位序列可以簡單地這樣執行:
inputA = int('00100011',2) # define binary number inputB = int('00101101',2) # define binary number print bin(inputA) # prints inputA in binary print bin(inputB) # prints inputB in binary print bin(inputA | inputB) # Execute bitwise logical OR and print result in binary
結果如下:
0b100011 0b101101 0b101111
XOR 運算符
這是一個有趣的運算符:異或或短XOR。為了執行它,我們使用^運算。位序列可以簡單地這樣執行:
inputA = int('00100011',2) # define binary number inputB = int('00101101',2) # define binary number print bin(inputA) # prints inputA in binary print bin(inputB) # prints inputB in binary print bin(inputA ^ inputB) # Execute bitwise logical OR and print result in binary
結果如下:
0b100011 0b101101 0b1110