中小学生学python_《中小学生Python编程入门指南》 附录一
我們怎么看懂二進制的大小呢?換句話說,二進制怎么轉化成十進制來理解呢?
舉個例子,比如說有一個8位的二進制數“01011011”如下,轉換為十進制的,應該怎么轉化?
二進制數的每一位數都是2的幾次冪,就像我們的十進制一樣,0是10的0次冪(100),10是10的1次冪(101),100是10的2次冪(102)。上述“01011011”對應每個位置的冪數如下:
二進制數轉化十進制就是每個位所代表的數值和每個位的數值相乘后相加,也就是:
(27* 0) +?(26* 1)+(25* 0)+(24* 1)+(23* 1)+(22* 0)+(21* 1)+(20* 1)
因為整數乘0等于0,乘1等于本身,那么上述計算可簡化為:
26+24+23+21+20= 64 + 16 + 8 + 2 + 1 = 91
也就是說,我們只需要計算數字為1的位所代表十進制數的和就可以了。
那我們知道了二進制轉十進制,那十進制如何轉二進制呢?我們可以使用求余的方法計算,比如剛才的91,如下圖:
由下往上將余數組合起來就是“1011011”,前面補0湊齊8位就是01011011。
2、二進制的運算規則。
十進制的計算規則我們都很清楚了,那么二進制又是怎么計算的呢?其實是有規律的,因為只有0、1兩個數,規則就簡單很多:
加法:0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1, 1 + 1 = 10(進1位)
減法:0 - 0 = 0, 1 - 0 = 1, 1 - 1 = 0, 0 - 1 = 1(借1位)
乘法:0×0 = 0, 1 × 0 = 0, 0 × 1 = 0, 1 × 1 = 1
除法:0 ÷ 1 = 0, 1 ÷ 1 = 1(0不能為除數)
看起來很多,其實細看一下,跟十進制是一樣的,只不過是“逢2進1”的區別,我們可以舉例看一下,比如使用1001和0101的四則運算如下圖所示:
二進制的運算,一般比較少用到,更為常用的是與、或、非、異或的運算,規則更為簡單:
與:1 & 1 = 1, 1 & 0 = 0, 0 & 1 = 0, 0 & 0 =0(其實就是0和任意數字做與運算都為0,與的符號為&)
或:1 | 1 = 1, 1 | 0 = 1, 0 | 1 = 1, 0 | 0 = 0(1和任意數字做或運算都為1,或的符號為|)
非:~1 = 0, ~0 = 1(其實就是取反,反過來了,非的符號為~)
異或:1 ^ 1 = 0,1 ^ 0 = 1, 0 ^ 1 = 1, 0 ^ 0 = 0(相同的為0, 不同的為1,異或的運算符為^)
3、我們學了2.1節之后就知道數值有整數和浮點數之分,整數的存儲我們比較好理解,就是通過二進制的存儲方式來存儲十進制。但是如果有負數我們應該怎么存儲呢?所以整數可以分為有符號數和無符號數。
有符號數:計算機將存儲的最高位用來作為符號位,最高位為0,表示正數,最高位為1,表示負數。
無符號數:將全部位數用來表示數值,沒有符號位,不能表示負數。
我們知道了計算機存儲整數的方法,那么計算機做整數運算的話該怎么計算呢?
舉個例子,如果計算1 - 1的話,按照我們已知的計算方法應該是如下計算:
1 - 1 = ?1 + (-1) = (00000001) + (10000001) = 10000010 = -2 ≠ 0
這顯然是不正確的。為了解決這個問題,整數又分了三種編碼方式:原碼、反碼、補碼。
原碼:在數值前面增加了一位符號位(即最高位為符號位),該位為0表示正數,該位為1表示負數,其余位表示數值的大小。
反碼:正數的反碼與其原碼相同。負數的反碼是對其原碼逐位取反,但符號位除外。
補碼:正數的補碼與其原碼相同,負數的補碼就是對該負數的反碼加1。0的補碼為0。
【從定義可以看出,正數的補碼,反碼,原碼相同。0的補碼就是本身。那么負數的原碼和補碼如何轉換呢?已知一個負數求補碼方法:絕對值原碼按位求反加1。已知負數補碼求負數方法:符號位不變,其他位按位求反加1。】
反碼能解決上述問題嗎?我們再算一下:1的反碼為000000001,-1的反碼為11111110,計算如下:
1 - 1 = 1 + (-1) = (00000001) + (11111110) = 11111111 = -0
1 - 2 = 1 + (-2) = (00000001) + (11111101) = 11111110 = -1
結果都是正確的,但是又有一個問題,0是沒有+0和-0的區別的。
我們在看一下補碼的計算:
1 - 1 = 1 + (-1) = 00000001 + 11111111 = 00000000 = 0
1 - 2 = 1 + (-2) = 00000001 + 11111110 = 11111111 = -1
結果都是正確的,顯然,計算機使用補碼來存儲和計算是比較方便的。
在Python里面,整數是無限大的,理論上內存多大,整數就可以多大,所以int類型的數據沒有范圍,但是如果在C語言中,int類型則有一些受限,比如是在32位的電腦中,int占32位,取值范圍為-2147483648~2147483647(-2^32~2^32-1)。如果超出范圍怎么辦,那就有“溢出”的風險,比如說4位范圍的數,最大已經到了1111,如果這個時候再加1,則會變成10000了,而程序只能讀4位,該數值就變成0,我們稱為溢出。C語言更為關心計算機底層,所以編寫C語言則需要格外小心。C語言還有long類型和long long類型,來表示更大的數值范圍。在python2還有long類型,在Python3里面就沒有了。我們可以更關心我們的編程邏輯而不用擔心更加底層的問題
4、知道了整數的存儲和計算之后我們再聊一下小數,其實不是所有小數都叫做浮點數,浮點數是一種表示數字的標準,整數也可以用浮點數的格式來存儲。小數的表示方法除了浮點數還有定點數,區別就是小數點能不能“浮動”,浮點數的小數點在邏輯上是不固定的。
浮點數可以用一個表達式來表示:V = (-1)s × M × 2E
我們來逐個解釋一下:
符號(sign) :1個bit表示,當s=0,V為正數;當s=1,V為負數。
階碼(exponent) :E的作用是對浮點數加權,用于存儲科學計數法中的指數數據,并且采用移位存儲。
尾數(significand) :M是一個二進制小數,因為是二進制,所以科學計數法中這個值范圍是:1≤M<2。(和十進制中范圍為1~10一樣)
一般在編程語言(如C語言)中浮點類型一般是采用單精度(float)和雙精度(double)來存儲,float數據占用32bit,double數據占64bit。在python中是使用了雙精度來存儲float,沒有double。
總結
以上是生活随笔為你收集整理的中小学生学python_《中小学生Python编程入门指南》 附录一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mugen4g补丁如何使用_CAD如何去
- 下一篇: python按比例生成数据组_基于pyt