<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ### 1.1.2 計算機語言 如前所述,計算機解決問題的過程實質上是機械地執行人們為它編制的指令序列的過程。為了告訴計算機應當執行什么指令,需要使用某種計算機語言。這種計算機語言能夠精 確地描述計算過程,稱為程序設計語言或編程語言(programming language)。 與計算機打交道的理想語言當然是像科幻電影所展示的那樣,人類用自然語言與計算機(電影中更多的是機器人)進行對話。遺憾的是,由于自然語言的詞語和句子往往有歧義, 既不精確也不簡練,至少目前的計算機還不能很好地理解自然語言。所以計算機科學家設計 了人造語言來與計算機進行交流。編程語言是人工設計的形式語言,具有嚴格的語法和語義, 因此沒有歧義的問題。 機器語言 CPU 制造商在設計某種 CPU 硬件結構的同時,也為其設計了一種“母語”——指令集, 這種語言稱為機器語言(machine language)。機器語言在形式上是二進制的,即所有指令都 是由 0 和 1 組成的二進制序列。利用機器語言寫的程序自然就是二進制指令的序列。我們來 > ① 不能望文生義地以為計算機科學是關于計算機的學問。著名計算機科學家 Dijkstra 有一句名言:計算機之 于計算機科學,正如望遠鏡之于天文學。 看一條 Intel 8086 處理器的機器指令: ``` 0000010000000001 ``` 只要你將這一串 0/1 序列交給 CPU,CPU 就會按指令要求執行特定操作——將 1 存儲 到計算機的某個寄存器①當中。計算機只懂得這種非常低級的機器語言。顯然,用機器語言 編程序與計算機打交道,實在是太麻煩了,畢竟機器語言指令既難理解又難記憶。 匯編語言 為了使編程更容易,人們發明了匯編語言(assembly language)。匯編語言本質上是將機 器指令用更加容易為人們所理解和記憶的“助憶符”形式表現出來。例如前面那條將 1 存入 寄存器的機器指令在匯編語言中可以寫成: ``` MOV AL, 1 ``` 可見在匯編語言中,指令的操作符是用 MOV(即 move)之類的助憶符表示的,操作數 據也用易理解的數字或符號來表示,因此指令的含義變得非常容易理解,例如上面這條指令 可以讀成“將 1 送入寄存器 AL”。雖然編寫匯編語言程序對程序員來說難度降低了很多,但 是很遺憾,計算機并不懂匯編語言。為了使計算機理解匯編語言程序,需要用一種稱為匯編 器(assembler)的程序把匯編語言程序翻譯成機器語言程序。有了匯編器這個“翻譯”,程 序員“說”的匯編語言就能被計算機“聽”懂并執行了。 即使到了今天,匯編語言在某些場合(如嵌入式系統)仍然非常有用,因為用匯編語言 能夠寫出執行效率很高的程序。但是,匯編語言和機器語言并沒有本質上的差別,同樣屬于 非常低級的語言。而低級語言具有無法克服的缺點:第一,低級語言與機器硬件結構緊密關 聯,因此為掌握低級語言必須了解很多底層硬件知識,導致低級語言的學習和使用都很困難, 開發效率低而且容易出錯;第二,由于不同硬件的計算機具有不同的機器語言和匯編語言, 一類計算機上的低級語言程序不能拿到另一類計算機上執行,我們說低級語言程序不具有可 移植性。 高級編程語言 為了克服低級語言的缺點,計算機科學家設計出了更加易用的高級編程語言(high-level programming language)。高級語言相對于機器語言和匯編語言具有很多優點:第一,高級語 言吸收了人們熟悉的自然語言(英語)和數學語言的某些成分,因此非常易學、易用、易讀; 第二,高級語言在構造形式和意義方面具有嚴格定義,從而避免了語言的歧義性;第三,高 級語言與計算機硬件沒有關系,用高級語言寫的程序可以移植到各種計算機上執行。 如果用高級語言來表達將 1 存入某處的指令,可以寫成這樣: ``` x = 1 ``` 顯然這更加類似于我們從小就熟悉的數學語言,很容易理解和學會使用。 編譯和解釋 用高級語言所寫的程序是不能直接交給計算機執行的,因為計算機完全不懂 x = 1 之 類的語句。為了讓計算機理解并執行,必須先將高級語言程序翻譯成機器語言程序。 高級語言的翻譯有兩種方式:編譯和解釋。 編譯器(compiler)將高級語言程序(稱為源代碼)完整地翻譯成等價的機器語言程序(稱為目標代碼),如圖 1.2 所示。編譯的特點是“一勞永逸”,整個源代碼一旦翻譯完畢, 今后就可以在任何時候多次執行目標代碼,再也不需要編譯器的參與了。就像翻譯家將一本 英文小說筆譯成中文,這是一次性的工作,作為翻譯結果的中譯本可以多次閱讀。以編譯方 > ① 寄存器是 CPU 里面的高速存儲部件。 式處理源代碼,對目標代碼可以進行很多細致的優化,從而程序的執行速度一般會更快。就 像翻譯家對中譯本可以精雕細琢,從而達到信達雅的境界。 ![](https://box.kancloud.cn/2016-02-22_56cafcdb7d2b5.png) 圖 1.2 高級語言的編譯 解釋器(interpreter)直接分析并執行高級語言程序,如圖 1.3 所示。解釋的特點是“見 招拆招”,對源代碼總是臨機進行解釋和執行。就像外交部的口譯人員所做的工作,國家主席 說一句中文,口譯者立即將它翻譯成英文;即使主席后來說了同樣的話,口譯者還是要重新 翻譯,無法重復利用以前的翻譯結果。解釋執行的處理方式無法進行上下文信息來進行優化, 導致程序執行速度較慢,正如口譯者無法琢磨最佳譯文一樣。但解釋性語言具有更靈活的編 程環境,可以交互式地輸入程序語句并立即執行,程序員面對的仿佛是一臺能聽懂高級語言 的計算機。 ![](https://box.kancloud.cn/2016-02-22_56cafcdb91f6a.png) 圖 1.3 高級語言的解釋 高級語言之所以具有前面提到的可移植性,正是因為高級語言的這種先翻譯后執行的特 點。只要一臺計算機上有合適的編譯器或解釋器,用某種高級語言編寫的程序可以在該計算 機上執行。就像國家主席的講話可以被中譯英口譯人員翻譯給英語國家的人聽,也可以被中 譯法口譯人員翻譯給法語國家的人聽一樣。 還要說明的是,編譯器和解釋器本身也是程序,這種程序所執行的計算就是將別的程序 翻譯成機器能夠理解的指令。為了讓一臺計算機能夠執行某種高級語言程序,必須先在該計 算機上安裝特定高級語言的編譯器或解釋器程序! 迄今為止,計算機科學家們發明了數百種高級編程語言。不同語言的細節不盡相同,但 一些基本語言構造在絕大多數語言中都是存在的,例如輸入輸出、基本的數學運算、有條件 地執行和重復地執行等等。一般只要掌握一種編程語言,就足以利用計算機去解決實際問題。 而且一旦掌握了一種編程語言,再去學習其他語言也會變得非常容易。 本書要討論的是用計算機解決問題時的思想和方法,這些內容原則上與使用哪種編程語 言沒有關系。但是,為了更好地掌握本書的內容,需要進行編程實踐,這就要求我們必須學 會某種編程語言。選擇什么編程語言呢?高級編程語言雖多,但流行的并沒有多少。2012 年 4 月公布的 TIOBE 編程語言排行榜①上,位列前 10 名的語言分別是 C、Java、C++、Objective-C、 C#、PHP、(Visual)Basic、Python、JavaScript 和 Perl。本書將采用位列其中的 Python 語言, 選擇這個語言的理由是該語言非常易學易用,而且特別適合教學。 > ① [http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html](http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看