本書從計算機的內(nèi)部結構開始講起,以圖配文的形式詳細講解了二進制、內(nèi)存、數(shù)據(jù)壓縮、源文件和可執(zhí)行文件、操作系統(tǒng)和應用程序的關系、匯編語言、硬件控制方法等內(nèi)容,目的是讓讀者了解從用戶雙擊程序圖標到程序開始運行之間到底發(fā)生了什么。書中還專設了“如果是你,你會怎樣講呢?”專欄,以小學生、老奶奶等為對象講解程序的運行原理,頗為有趣。
第3版升級了書中用到的軟件產(chǎn)品和開發(fā)工具,并在正文和注釋中補充了大量內(nèi)容,讓初學者更容易理解。對于舊版中頗受好評的硬件相關章節(jié),更新了C語言的樣例代碼。書末附錄關于C語言的章節(jié)也升級至最新標準。
第12章新增了Python機器學習的內(nèi)容,讓初學者能夠輕松體驗人工智能的樂趣。附錄也增加了對Python語言的介紹。
本書圖文并茂,通俗易懂,非常適合計算機愛好者及相關從業(yè)人員閱讀。
★ 日文版重印41次!
★“計算機組成原理”圖解趣味版
★ 蹲馬桶就能看懂的編程基礎知識
本書適合
○ 菜鳥程序員入門進階
○ 中級程序員查漏補缺
○ 高手程序員向家人普及計算機知識
=========================================
※ 如何向小學生講解CPU和二進制?
※ 如何向中學生講解內(nèi)存和磁盤?
※ 如何向女高中生講解操作系統(tǒng)的原理?
※ 如何向老奶奶說明顯示器和電視的不同?
如果你完全沒有思路,就應該讀一讀這本書。
★ 以圖配文,深入講解編程基礎知識
★ 語言通俗,即使是文科生也能看得懂
★ 特設“如果是你,你會怎么講?”專欄,生動有趣
矢沢久雄
YAZAWA股份有限公司董事長兼總經(jīng)理。GrapeCity信息技術集團顧問。電腦作家之友會會長。 曾在某大型電子公司從事過電腦生產(chǎn),在Software House做過程序員,現(xiàn)主要從事軟件開發(fā)工作。工作之余筆耕不輟,從電路到編程語言均有涉及。代表作有《計算機是怎樣跑起來的》《使用C語言學習程序設計的基礎》《征服C++類和繼承》等。自稱軟件藝人。
目錄
第 1章 對程序員來說,CPU到底是什么 1
1.1 看一看 CPU的內(nèi)部構造 3
1.2 CPU是寄存器的集合體 6
1.3 決定程序流程的程序計數(shù)器 9
1.4 條件分支和循環(huán)的原理 10
1.5 函數(shù)調(diào)用的原理 13
1.6 用基址和變址實現(xiàn)數(shù)組 16
1.7 CPU的處理其實很簡單 17
第 2章 用二進制來理解數(shù)據(jù) 19
2.1 計算機用二進制處理信息的原因 21
2.2 二進制到底是什么 23
2.3 移位運算與乘除運算的關系 25
2.4 便于計算機處理的“2的補碼” 27
2.5 邏輯右移與算術右移的區(qū)別 31
2.6 掌握邏輯運算的竅門 34
如果是你,你會怎樣講呢? 給小學新生講解 CPU和二進制 38
第3章 計算機在計算小數(shù)時會出錯的原因 31
3.1 將0.1累加100次的結果不是10 33
3.2 如何用二進制表示小數(shù) 35
3.3 計算機計算出錯的原因 36
3.4 什么是浮點數(shù) 38
3.5 規(guī)格化表示法與移碼表示法 50
3.6 用程序來實際確認一下吧 53
3.7 如何避免計算機計算出錯 56
第4章 讓內(nèi)存化方為圓 61
4.1 內(nèi)存的物理結構十分簡單 63
4.2 內(nèi)存的邏輯結構像一幢大樓 67
4.3 指針其實很簡單 69
4.4 用好內(nèi)存先從數(shù)組開始 71
4.5 棧與隊列,以及環(huán)形緩沖區(qū) 73
4.6 在鏈表中添加和刪除元素很容易 78
4.7 用二叉查找樹高效地查找數(shù)據(jù) 82
第5章 內(nèi)存與磁盤的密切聯(lián)系 85
5.1 程序加載到內(nèi)存后才能運行 87
5.2 提高磁盤訪問速度的磁盤緩存 88
5.3 將磁盤當成內(nèi)存使用的虛擬內(nèi)存 89
5.4 將內(nèi)存當成磁盤使用的固態(tài)硬盤 92
5.5 節(jié)約內(nèi)存的編程技巧 93
5.6 了解一下磁盤的物理結構 98
第6章 自己動手壓縮數(shù)據(jù) 103
6.1 文件是以字節(jié)為單位記錄的 105
6.2 游程編碼的原理 106
6.3 游程編碼的缺點 107
6.4 從莫爾斯碼中發(fā)現(xiàn)哈夫曼算法的基礎 108
6.5 使用樹來構建哈夫曼編碼 111
6.6 通過哈夫曼算法大幅提高壓縮效率 114
6.7 無損壓縮與有損壓縮 115
如果是你,你會怎樣講呢? 給喜歡打游戲的初中生講解內(nèi)存和磁盤 119
第7章 程序在怎樣的環(huán)境下運行 121
7.1 運行環(huán)境 =操作系統(tǒng)+硬件 123
7.2 Windows消除了CPU之外的硬件差異 125
7.3 每種操作系統(tǒng)的API都是不同的 128
7.4 使用源代碼進行安裝 129
7.5 在任何地方都能提供相同運行環(huán)境的 Java虛擬機 130
7.6 云計算平臺提供的虛擬運行環(huán)境 132
7.7 BIOS與引導裝入程序 134
第8章 從源文件到可執(zhí)行文件 137
8.1 計算機只能執(zhí)行本機代碼 140
8.2 看一看本機代碼的內(nèi)容 142
8.3 編譯器負責翻譯源代碼 144
8.4 僅靠編譯無法得到可執(zhí)行文件 146
8.5 啟動代碼與庫文件 147
8.6 DLL文件與導入庫 149
8.7 運行可執(zhí)行文件需要什么 152
8.8 加載時生成的棧和堆 153
8.9 進階問答 155
第9章 操作系統(tǒng)與應用程序的關系 159
9.1 從歷史發(fā)展看操作系統(tǒng)的功能 161
9.2 關注操作系統(tǒng)的存在 164
9.3 系統(tǒng)調(diào)用與高級編程語言的可移植性 166
9.4 操作系統(tǒng)和高級編程語言對硬件進行了抽象化 168
9.5 Windows操作系統(tǒng)的特點 170
如果是你,你會怎樣講呢? 給喜歡智能手機的高中女生講解操作系統(tǒng)的功能 177
第 10章 通過匯編語言認識程序的真面目 179
10.1 匯編語言和本機代碼是一一對應的 181
10.2 用C編譯器輸出匯編語言源代碼 183
10.3 偽指令與注釋 186
10.4 匯編語言的語法是“操作碼 操作數(shù)” 187
10.5 最常用的movl指令 189
10.6 將數(shù)據(jù)存入棧中 191
10.7 函數(shù)調(diào)用的工作原理 192
10.8 被調(diào)用函數(shù)的工作原理 194
10.9 全局變量和局部變量的工作原理 195
10.10 循環(huán)的工作原理 199
10.11 條件分支的工作原理 203
10.12 體驗匯編語言的意義 207
第 11章 訪問硬件的方法 209
11.1 應用程序是否與硬件有關 211
11.2 負責硬件輸入輸出的in指令和out指令 213
11.3 外部設備的中斷請求 216
11.4 通過中斷實現(xiàn)實時處理 220
11.5 能夠快速傳輸大量數(shù)據(jù)的DMA 220
11.6 顯示字符和圖像的原理 222
如果是你,你會怎樣講呢? 給鄰居老奶奶講解顯示器與電視機的區(qū)別 224
第 12章 如何讓計算機“學習” 227
12.1 什么是機器學習 229
12.2 支持向量機 231
12.3 Python交互模式的使用方法 234
12.4 準備學習數(shù)據(jù) 236
12.5 查看手寫數(shù)字數(shù)據(jù)的內(nèi)容 237
12.6 通過機器學習識別手寫數(shù)字 239
12.7 嘗試交叉驗證 242
如果是你,你會怎樣講呢? 給常去的酒館的老板講解機器學習的類別 244
附錄1 親手嘗試C語言 247
C語言的特點 247
變量與函數(shù) 248
數(shù)據(jù)類型 249
輸入、運算、輸出 250
創(chuàng)建和使用函數(shù) 252
局部變量與全局變量 254
數(shù)組與循環(huán) 255
其他語法 257
附錄2 親手嘗試Python 261
Python的特點 261
一切皆對象 263
數(shù)據(jù)類型 265
輸入、運算、輸出 266
創(chuàng)建和使用函數(shù) 266
局部變量與全局變量 268
數(shù)組與循環(huán) 269
其他語法 271
后記 273
致謝 273