python之計算機硬件基本認知_數據單位_進制間轉換_數的原碼反碼補碼

一:計算機硬件基本認知

cpu:   中央處理器.   至關於人的大腦.運算中心,控制中心.spa

內存:  臨時存儲數據. 優勢:讀取速度快,缺點:容量小,造價高,斷電即消失.操作系統

硬盤:  長期存儲數據. 優勢:容量大,造價相對低,斷電不消失,缺點:讀取速度慢.內存

操做系統:統一管理計算機軟硬件資源的程序資源

 

二: 計算機文件大小單位

b = bit  (比特)it

B = Byte 字節硬件

1Byte = 8 bit   #一個字節等於8位  能夠簡寫成 1B = 8b二進制

1KB = 1024B程序

1MB = 1024KBcpu

1GB = 1024MB數據

1TB = 1024GB

1PB = 1024TB

1EB = 1024PB

 

三:進制轉換

二進制:2個數字組成,0 1     :  0b101

八進制:8個數字組成,0,1,2,3,4,5,6,7        :  0o127  

十進制:10個數字組成,0,1,2,3,4,5,6,7,8,9   :  250

十六進制:16個數字組成,0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f(字母大小寫均可以,分別表明10,11,12,13,14,15) :0xff  0Xff  0XFF         

 

1.其餘進制轉十進制

1)二進制 轉化成 十進制:

: 0b10100101  

運算:1* 2^0 + 0* 2^1 + 1* 2^2 + 0* 2^3 + 0* 2^4 + 1* 2^5 + 0* 2^6 + 1* 2^7=

1 + 0 + 4 + 0 + 0 + 32 + 0 + 128 = 165

2)八進制 轉化成 十進制:

: 0o127

運算:7*8^0 + 2*8^1 + 1*8^2 = 7+16+64 = 87

2) 十六進制 轉化成 十進制:

: 0xff

運算:15*16^0 + 15*16^1 = 255

 

小練習: 轉化成十進制

0b11010110  #214

0b01110101  #117

0o234       

0o171

0x123

0x1c2

2.十進制轉成其餘進制

1)十進制 轉化成 二進制:

426 => 0b110101010  

運算過程:   426除以2,得出的結果再去不停地除以2,

直到除完最後的結果小於2中止,

在把每一個階段求得的餘數從下到上依次拼接完畢便可

2)十進制 轉化成 八進制:

426 => 0o652

運算過程:   426除以8,得出的結果再去不停地除以8,

直到除完最後的結果小於8中止,

在把每一個階段求得的餘數從下到上依次拼接完畢便可

3)十進制 轉化成 十六進制:

運算過程:   426除以16,得出的結果再去不停地除以16,

直到除完最後的結果小於16中止,

在把每一個階段求得的餘數從下到上依次拼接完畢便可

小練習: 轉化成對應進制

723 => 2

654 => 2

723 => 8  

654 => 8

723 => 16

654 => 16

3.二進制與八進制轉換

二進制與八進制對應關係:

八進制  二進制

0 000

1 001

2 010

3 011

4 100

5 101

6 110

7 111

```

 

```

:1010100101

八進制:從右向左 3位一隔開 不夠三位用0補位 變成:

001 010 100 101

0o   1    2   4   5

```

4.二進制與十六進制轉換

```

十六進制  二進制

0   0000

1   0001

2   0010

3   0011

4   0100

5   0101

6   0110

7   0111

8   1000

9   1001

a   1010

b   1011

c   1100

d   1101

e   1110

f   1111

```

```

:1010100101

十六進制:從右向左 4位一隔開 不夠四位用0補位 變成:

0010 1010 0101

0x2a5

5.八進制 與 十六進制的轉換

先轉換成二進制 再去對應轉換

好比:0x2a5 轉換成 1010100101 再轉8進制 0o1245

### 小練習: 轉化成對應進制

0x1DD => 8

0x29a => 8

0o573 => 16

0o336 => 16

四:原碼 反碼 補碼   

1.概念  

計算機的全部數據在底層都是以二進制的[補碼]形式存儲

實際人們看到的數字是[原碼]轉化來的

[原碼]是經過[補碼]獲得的

補碼 ->  原碼 -> 最後人們看到的數

***進制轉換的時候須要先把內存存儲的補碼拿出來變成原碼在進行轉換輸出***

 

正數高位補0  負數高位補1(前面空白位全是1)

    數字1   00000000 1  正數高位都補0

    數字-1  11111111 1  負數高位都補1

 

原碼: 用來轉換對應進制

反碼: 二進制碼01,10叫作反碼,反碼用於原碼補碼之間的轉換.(符號位不變)

補碼: 用來作數據的存儲運算. 補碼提出的根源是讓計算機底層的實現減法操做(能夠表達出一個數的正負)

言外之意:計算機默認只會作加法,:5+(-3)  => 5 - 3

乘法除法:是經過左移和右移 << >> 來實現

 

 2.運算

(原碼 反碼 補碼之間的轉換 , 符號位不要動)

正數: 原碼 = 反碼 = 補碼

負數: 原碼 = 補碼取反加1   給補碼求原碼

負數: 補碼 = 原碼取反加1   給原碼求補碼

 

小練習:

#給原碼求補碼

-6 的補碼是多少?

原碼爲: 1  0000...00000110

反碼爲: 1  1111...11111001

補碼爲: 1  1111...11111010

6  的補碼是多少?

6是整數原碼和反碼和補碼相同得:

補碼爲:0 0000...00000110

10 的補碼是多少?

補碼爲:0 0000...00001010

   -10 的補碼是多少?

原碼爲:1 0000...00001010

反碼爲:1 1111...11110101

補碼爲:1 1111...11110110

     9 的補碼是多少?

    補碼爲:0 0000...00001001

-9 的補碼是多少?

原碼爲:  1 0000...00001001

反碼爲:1 1111...11110110

#給補碼求原碼

1 ... 111  00011 (高位都是1)

1 ... 111  0110010 (高位都是1)

# 9+(-5) 用二進制相加運算一下

 

5-3 運算結果 (用二進制的形式表達)

5 + (-3) => 5 - 3

5  => 101

-3 => ?

 

(1) 先算-3的原碼

1  0000...000  011

(2) 取反

1  1111...111  100

(3) 1  最終值是補碼 (用來作算術運算或存儲用的)

1  1111...111  101

 

 

5  => 0 0000...000 101

-3 => 1 1111...111 101

 

2  => 0..0000 ..   010

#(1) 正數的原碼 反碼 補碼 全都同樣

由於高位時0  因此不須要再用補碼取反+1 獲得原碼了,直接轉換便可.

 

 

-5+3

-5 => ?

(1) 先算-5的原碼

1 0000.0000 101

(2) 取反

1 1111.1111 010

(3) 加一

1 1111.1111 011

3 => ?

(1) 原碼

0 0000.0000 011

由於是正數 因此原碼和補碼相同,不須要再轉換了

 

用補碼運算:

1 1111.1111 011

0 0000.0000 011

1 1111.1111 110

 

獲得一個補碼(負數)

給補碼求原碼:

# 取反

1 0000.0000 001

# 加一 (原碼)

1 0000.0000 010

-2

 

******

#最終進制轉換用的是原碼

#作算數運算或存儲用補碼

相關文章
相關標籤/搜索