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