1933年,美國數學家D.N.Lehmer造出一臺電氣計算機用來分解1-1000萬之間的全部天然數爲素數因子。
1946年2月14日,由美國軍方定製的世界上第一臺電子計算機「電子數字積分計算機」(ENIAC Electronic Numerical And Calculator)在美國賓夕法尼亞大學問世了。ENIAC(中文名:埃尼阿克)是美國奧伯丁武器試驗場爲了知足計算彈道須要而研製成的,這臺計算器使用了17840支電子管,大小爲80英尺×8英尺,重達28t(噸),功耗爲170kW,其運算速度爲每秒5000次的加法運算,造價約爲487000美圓。ENIAC的問世具備劃時代的意義,代表電子計算機時代的到來。在之後60多年裏,計算機技術以驚人的速度發展,沒有任何一門技術的性能價格比能在30年內增加6個數量級。
第1代:電子管數字機(1946—1958年)
硬件方面,邏輯元件採用的是真空電子管,主存儲器採用汞延遲線、陰極射線示波管靜電存儲器、磁鼓、磁芯;外存儲器採用的是磁帶。軟件方面採用的是機器語言、彙編語言。應用領域以軍事和科學計算爲主。
特色是體積大、功耗高、可靠性差。速度慢(通常爲每秒數千次至數萬次)、價格昂貴,但爲之後的計算機發展奠基了基礎。
第2代:晶體管數字機(1958—1964年)
硬件方的操做系統、高級語言及其編譯程序。應用領域以科學計算和事務處理爲主,並開始進入工業控制領域。特色是體積縮小、能耗下降、可靠性提升、運算速度提升(通常爲每秒數10萬次,可高達300萬次)、性能比第1代計算機有很大的提升。
第3代:集成電路數字機(1964—1970年)
硬件方面,邏輯元件採用中、小規模集成電路(MSI、SSI),主存儲器仍採用磁芯。軟件方面出現了分時操做系統以及結構化、規模化程序設計方法。特色是速度更快(通常爲每秒數百萬次至數千萬次),並且可靠性有了顯著提升,價格進一步降低,產品走向了通用化、系列化和標準化等。應用領域開始進入文字處理和圖形圖像處理領域。
第4代:大規模集成電路機(1970年至今)
硬件方面,邏輯元件採用大規模和超大規模集成電路(LSI和VLSI)。軟件方面出現了數據庫管理系統、網絡管理系統和麪向對象語言等。特色是1971年世界上第一臺微處理器在美國硅谷誕生,開創了微型計算機的新時代。應用領域從科學計算、事務管理、過程控制逐步走向家庭。html
因爲集成技術的發展,半導體芯片的集成度更高,每塊芯片可容納數萬乃至數百萬個晶體管,而且能夠把運算器和控制器都集中在一個芯片上、從而出現了微處理器,而且能夠用微處理器和大規模、超大規模集成電路組裝成微型計算機,就是咱們常說的微電腦或PC機。微型計算機體積小,價格便宜,使用方便,但它的功能和運算速度已經達到甚至超過了過去的大型計算機。另外一方面,利用大規模、超大規模集成電路製造的各類邏輯芯片,已經制成了體積並不很大,但運算速度可達一億甚至幾十億次的巨型計算機。我國繼1983年研製成功每秒運算一億次的銀河Ⅰ這型巨型機之後,又於1993年研製成功每秒運算十億次的銀河Ⅱ型通用並行巨型計算機。這一時期還產生了新一代的程序設計語言以及數據庫管理系統和網絡軟件等。
隨着物理元、器件的變化,不只計算機主機經歷了更新換代,它的外部設備也在不斷地變革。好比外存儲器,由最初的陰極射線顯示管發展到磁芯、磁鼓,之後又發展爲通用的磁盤,現又出現了體積更小、容量更大、速度更快的只讀光盤(CD—ROM)。python
02 計算機的組成程序員
傳統電腦系統的硬體單元通常可分爲輸入單元、輸出單元、算術邏輯單元、控制單元及記憶單元,其中算術邏輯單元和控制單元合稱中央處理單元(Center Processing Unit,CPU)。數據庫
03 計算機的基本原理緩存
1.3 基本工做原理網絡
(1)數制轉換工具
10進制轉換成其餘的都是除以要轉換成的那個數,也就是說轉換成二進制的就除以2,轉換成八進制的就除以8,轉換成十六進制的就除以16,而後倒取餘數。佈局
不一樣的進位制數轉化爲十進制數:按權展開相加
十進制是權是10;二進制是權是2;十六進制是權是16;八進制是權是8;
例:110011(二進制數)=1*2^5+1*2^4+0*2^3+0*2^2+1*2^1+1*2^0=32+16+2+1=51
1507(八進制數)=1*8^3 + 5*8^2 + 0*8^1 + 7*8^0 = 839
2AF5(十六進制數)=2*16^3 + A*16^2+ F*16^1 + 5*16^0 = 10997性能
二進制換算八進制
將二進制數從右到左,三位一組,不夠補0
例:二進制數10110111011換八進制數:
010 110 111 011
結果爲:2673 測試
二進制轉換十六進制
二進制數轉換爲十六進制數的方法也相似,從右到左,四位一組,不夠補0
如上題:
0101 1011 1011
結果爲:5BB
(2)機器數與碼制
各類數據在計算機中表示的形式稱爲機器數,其特色是採用二進制計數制,數的符號用0、1表示,小數點則隱含表示而不佔位置。機器數對應的實際數值稱爲真值。
機器數有無符號數和帶符號數之分。無符號數表示正數,在機器數中沒有符號位。對於無符號數,若約定小數點的位置在機器數的最低位以後,則是純整數;若約定小數點的位置在機器數的最高位以前,則是純小數。對於帶符號數,機器數的最高位一晴地正負的符號位,其他位則表示數值。若約定小數點的位置在機器數的最低數值位以後,則是純整數;若約定小數點的位置 在機器數的最高數值位以前,則是純小數位。
爲了便於運算,帶符號的機器右數可採用原碼,反碼和補碼等不一樣的編碼方法,機器數的這些編碼方法稱爲碼制。
1. 原碼錶示法
數值X的原碼記爲[X]原,最高位是符號位,0表示正號,1表示負號,其他位表示數值的絕對值。
2.反碼錶示法
數值X的原碼記爲[X]反,最高位是符號位,0表示正號,1表示負號,正數的反碼和原碼相同,負數的反碼則是其絕對值按位求反。
3.補碼錶示法
數值X的原碼記爲[X]補,最高位是符號位,0表示正號,1表示負號,正數的補碼與其原碼和反碼相同,負數的補碼則等於其反碼的末尾加1。
4.移碼錶示法
.移碼錶示法是在數X上增長一個偏移量來定義的,經常使用於表示浮點數中的階碼。若是機器字長爲n,在偏移2的(n-1)次方的狀況下,只要將將碼的符號位取反即可得到相應的移碼錶示。
(3)漢字編碼
區位碼
爲了使每個漢字有一個全國統一的代碼,1980年,我國頒佈了第一個漢字編碼的國家準: GB2312-80《信息交換用漢字編碼字符集》基本集,這個字符集是我國中文信息處理技術的發展基礎,也是目前國內全部漢字系統的統一標準。
全部的國標漢字與符號組成一個94×94的矩陣。在此方陣中,每一行稱爲一個"區",每一列稱爲一個"位",所以,這個方陣實際上組成了一個有94個區(區號分別爲0 1到94)、每一個區內有94個位(位號分別爲01到94)的漢字字符集。一個漢字所在的區號和位號簡單地組合在一塊兒就構成了該漢字的"區位碼"。在漢字的區位碼中,高兩位爲區號,低兩位爲位號。
在區位碼中,01-09區爲682個特殊字符,16~87區爲漢字區,包含6763個漢字 。其中16-55區爲一級漢字(3755個最經常使用的漢字,按拼音字母的次序排列),56-87區爲二級漢字(3008個漢字,按部首次序排列)。
· 須要注意的是:區位碼一般都是用十進制表示的,例如「誠」字的區位碼爲1947,也就說它位於19區第47個字符。
國標碼
國家標準代碼,簡稱國標碼,是中華人民共和國的中文經常使用漢字編碼集。國家標準強制標準冠以「GB」。現時中華人民共和國官方強制使用GB 18030標準,但較舊的計算機仍然使用GB 2312。國標碼 =區位碼(16進制化--區碼和位碼分別進行16進制轉化)+2020H。
機內碼
計算機只識別由0、1組成的代碼,ASCII碼是英文信息處理的標準編碼,漢字信息處理也必須有一個統一的標準編碼。 漢字交換碼(國標碼)主要用於漢字信息交換,我國國家標準局於1981年5月頒佈了《信息交換用漢字編碼字符集——基本集》,代號爲GB2312-80,共對6763個漢字和682個圖形字符進行了編碼。
其編碼原則爲:漢字用兩個字節表示,原則上,兩個字節能夠表示 256×256=65536種不一樣的符號,做爲漢字編碼表示的基礎是可行的。但考慮到漢字編碼與其它國際通用編碼,如ASCII西文字符編碼的關係,我國國家標準局採用了加以修正的兩字節漢字編碼方案,只用了兩個字節的低7位。這個方案能夠容納128×128=16384種不一樣的漢字,但爲了與標準ASCII碼兼容,每一個字節中都不能再用32個控制功能碼和碼值爲32的空格以及127的操做碼。因此每一個字節只能有94個編碼。這樣,雙七位實際可以表示的字數是:94×94=8836個。
機內碼 = 國標碼 + 8080H
機內碼 = 區位碼(16進制化--區碼和位碼分別進行16進制轉化) + a0a0H
相互轉換
內碼轉換爲區位碼
區位碼: 區碼=內碼高字節-0xa0
位碼=內碼低字節-0xa0
例如:「國」內碼爲:0xb9,0xfa
16進製表示的區位碼:0x19,0x5a
其區位碼(默認爲10進制):2590
區位碼轉換爲內碼
內碼: 內碼高字節=區碼+0xa0
內碼低字節=位碼+0xa0
例如:「海」區位碼爲:2603
16進製表示的區位碼:0x1a,0x03
其內碼(默認爲16進制):0xba,0xa3
字模
漢字在顯示的時候,是以點陣的形式顯示出來的,常見到的有16*16點陣、24*24點陣、32*32點陣。好比說「啊」的16*16點陣字模以下,共256Bits,佔用32 Bytes:
0x00,0x00,0xf7,0x7e,0x95,0x04,0x95,0x04,0x96,0x74,0x96,0x54,0x95,0x54,0x95,0x54,0x95,0x54,0xf5,0x54,0x97,0x74,0x04,0x04,0x04,0x04,0x05,0x04,0x04,0x14,0x04,0x08
字模顯示的時候,以兩個字節表示一行像素點,16行就構成了一個完整的字模。屏幕在顯示的時候,1顯示爲亮色,0顯示爲背景色,這樣就能把字體顯示出來。
字庫
字庫,就是全部漢字字模的集合。顯然,在編排這些字模的時候須要必定的順序(規則),而這個規則就是「機內碼」。根據機內碼的漢字佈局,將對應的漢字字模進行整合,造成字庫文件。在使用的時候,應用程序根據漢字的機內碼,從字庫中找到對應的存儲位置,取出字模,進行顯示。機內碼就是漢字在字庫中的索引。
在區位碼中,01-09區爲682個特殊字符,16~87區爲漢字區,有效漢字6768個。在製做字庫的時候把特殊字符刪除,只使用有效漢字區。也就是說咱們從第16區的第1位開始進行字模收集,當第16區收集結束,緊接着收集第17區,直到第87區編排結束。總共收集6768個漢字,佔用空間216576 Bytes。
(4)CPU
CPU從邏輯上能夠劃分紅3個模塊,分別是控制器、運算器和內部寄存器,這三部分由CPU內部總線鏈接起來。以下所示:
控制器:控制單元是整個CPU的指揮控制中心,由指令寄存器IR(Instruction Register)、指令譯碼器ID(Instruction Decoder)和操做控制器OC(Operation Controller)等,對協調整個電腦有序工做極爲重要。它根據用戶預先編好的程序,依次從存儲器中取出各條指令,放在指令寄存器IR中,經過指令譯碼(分析)肯定應該進行什麼操做,而後經過操做控制器OC,按肯定的時序,向相應的部件發出微操做控制信號。操做控制器OC中主要包括節拍脈衝發生器、控制矩陣、時鐘脈衝發生器、復位電路和啓停電路等控制邏輯。
運算器:是運算器的核心。能夠執行算術運算(包括加減乘數等基本運算及其附加運算)和邏輯運算(包括移位、邏輯測試或兩個值比較)。相對控制單元而言,運算器接受控制單元的命令而進行動做,即運算單元所進行的所有操做都是由控制單元發出的控制信號來指揮的,因此它是執行部件。
內部寄存器:包括CPU片內緩存和寄存器組,是CPU中暫時存放數據的地方,裏面保存着那些等待處理的數據,或已經處理過的數據,CPU訪問寄存器所用的時間要比訪問內存的時間短。採用寄存器,能夠減小CPU訪問內存的次數,從而提升了CPU的工做速度。但由於受到芯片面積和集成度所限,寄存器組的容量不可能很大。寄存器組可分爲專用寄存器和通用寄存器。專用寄存器的做用是固定的,分別寄存相應的數據。而通用寄存器用途普遍並可由程序員規定其用途,通用寄存器的數目因微處理器而異。這個是咱們之後要介紹這個重點,這裏先提一下。
咱們將上圖細化一下,能夠得出CPU的工做原理歸納以下:
總的來講,CPU從內存中一條一條地取出指令和相應的數據,按指令操做碼的規定,對數據進行運算處理,直到程序執行完畢爲止。
上圖中我沒有畫總線,只是用邏輯方式對其進行呈現。緣由早期Intel的微處理器,諸如8085,8086/8088CPU,廣泛採用了地址總線和數據總線複用技術,即將部分(或所有)地址總線與數據總線共用CPU的一些引腳。例如8086外部地址總線有20根,數據總線複用了地址總線的前16根引腳。複用的數據總線和地址總線雖然能夠少CPU的引腳數,但卻引入了控制邏輯及操做序列上的複雜性。因此,自80286開始,Intel的CPU才採用分開的地址總線和數據總線。
無論是複用仍是分開,對咱們理解CPU的運行原理沒啥影響,上圖沒畫總線的目的就是怕有些人太過於追求細節,一頭紮下去,浮不起來,不能從宏觀上藐視敵人。
總結一下,CPU的運行原理就是:控制單元在時序脈衝的做用下,將指令計數器裏所指向的指令地址(這個地址是在內存裏的)送到地址總線上去,而後CPU將這個地址裏的指令讀到指令寄存器進行譯碼。對於執行指令過程當中所須要用到的數據,會將數據地址也送到地址總線,而後CPU把數據讀到CPU的內部存儲單元(就是內部寄存器)暫存起來,最後命令運算單元對數據進行處理加工。周而復始,一直這樣執行下去
關於一些筆記
關於編碼 http://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html
32位的系統最多可使用 4 G 的內存 64位的系統可使用16T 左右的內存。
變量的命名規則:
01 具備描述性,見名知意
02 由數字,字母,下劃線組成
03 不能以數字開頭
04 不能夠是保留字符
05 變量名不能是中文
06 在python中 區分大小寫
如下關鍵詞不能是變量:
and as assert break class continue def del elif else except exec finally for from global if import in is lambda not or pass print raise return try while with yield
在python 2.7 中寫入中文,須要在程序第一行加上
#!-*- coding:utf-8 -*-
input 接受的全部數據都會默認看成字符串處理
if 後面必須加 : (縮進)
tab 鍵 != 4個空格
縮進級別必須保持一致