最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

非常規(guī)入門之一:通用編程語言技術基礎(一)

2021-11-18 22:00 作者:嬴寒  | 我要投稿

“通用編程語言技術基礎”作為《非常規(guī)入門》系列的開篇,將會為大家講解編程語言在發(fā)展過程中所產(chǎn)生的一系列易于被迷惑的知識,這些知識點可能分布在不同的編程語言的特性當中。

特別聲明:

1、《非常規(guī)入門》系列將會出現(xiàn)讓各位小伙伴感到陌生的詞匯,其中大部分詞匯是我根據(jù)經(jīng)驗進行總結而組合或創(chuàng)造使用的。所以可能第一感覺會是“亂用詞”。但是我會盡量做到嚴謹。

2、《非常規(guī)入門》系列的核心在于“非常規(guī)”,UP主深知大學教學中的“特點”。UP主大二(軟件工程專業(yè))開始寫編譯器,對于編程語言的特點也算有些理解,但是隨著學習深度的加深,有些理解也有可能是錯誤的。故而在投稿后,也會不定期的進行不同程度的修改。如果文章內容出現(xiàn)重大錯誤,也可能會選擇重新投稿。

3、基于第2點,也希望B站的小伙伴們,能夠指出文章中不恰當?shù)牡胤?,我會第一時間進行推敲、改動。

4、希望各位小伙伴多多轉發(fā),共同進步。

一、一代數(shù)據(jù)類型

在所有編程語言中,數(shù)據(jù)類型是有效數(shù)據(jù)在內存中存儲方式、操作方式的約束。但是在所有編程語言,所有的數(shù)據(jù)類型均是由數(shù)值演化而成,更精確的講,是無符號整數(shù)。

由數(shù)值演化出的第一批能夠處理數(shù)據(jù)的數(shù)據(jù)類型有:無符號整數(shù)、字符、布爾??梢怨们曳Q之為“一代數(shù)據(jù)類型”。即這些類型能夠由硬件原生實現(xiàn),而無需修改任何規(guī)則(或任何標準)。

我們能夠感受到這三個數(shù)據(jù)類型只是根據(jù)由于無符號整數(shù)的字節(jié)長度進行劃分的。但實際上并未對最底層數(shù)據(jù)類型進行“根本性質”的改造。

而這三種類型是所有數(shù)據(jù)類型構造的基礎。在此產(chǎn)生3個問題:

問題1:浮點為什么不屬于“一代數(shù)據(jù)類型”

解答:浮點能夠使用有限的無符號整數(shù)進行表達,即使不使用多個整數(shù)進行分段表示,浮點運算已經(jīng)改變了“一代類型”的基本運算方式,即在“基本四則運算”過程中,無法直接通過基本運算直接獲取。無論CPU是否直接支持浮點數(shù)運算,浮點數(shù)的格式也不屬于能夠直接表示的范疇。

問題2:字符串為什么不屬于“一代數(shù)據(jù)類型”

解答:字符串是有限字符的序列。無論字符串有多短,都改變了“一代類型”訪問方式。字符串的訪問方式必須是首地址+偏移地址的形式,其中偏移地址可以省略。

問題3:地址為什么不屬于“一代數(shù)據(jù)類型”

解答:在內存中,地址就是一個能夠標識內存長度與基本字長的數(shù)字,本身由標準文檔中的設計而產(chǎn)生,本身屬于硬件特性。即地址就是一個能夠使用的無符號整數(shù)。

二、一代數(shù)據(jù)結構

在上文中,解釋了所有數(shù)據(jù)類型的原始形式,即一代數(shù)據(jù)類型。但是在計算機的數(shù)據(jù)處理中,不可能只有整數(shù)、字符、布爾三種簡單的類型結構。由此需要通過這些已經(jīng)能夠“原生實現(xiàn)”的一代數(shù)據(jù)類型演化出一些“復雜的”數(shù)據(jù)類型。

復雜的數(shù)據(jù)類型由兩種實現(xiàn)形式:1、在結構上改變或組合多個一代數(shù)據(jù)類型;2、在運算方式上進行改變。

當然結構上的改變必然帶來運算方式上的改變,而運算方式的改變也會產(chǎn)生一定的結構變化。

既然一代數(shù)據(jù)類型在數(shù)據(jù)類型中具有基礎性地位,那么一代數(shù)據(jù)結構也應該具有基礎性地位。故而,可以構造出:結構體、數(shù)組。

需要特別說明的是,一代數(shù)據(jù)結構是對所有非基本數(shù)據(jù)類型的高度抽象。

問題1:為什么有結構體,而沒有聯(lián)合體、枚舉體?

解答:聯(lián)合體、枚舉體是特殊的結構體。聯(lián)合體的成員“共用”一段內存空間,而如何共用不需要向用戶(程序員)進行說明,而使用方式與結構體保持一致。枚舉體內部的賦值方式是有序的,在訪問方式上能夠與結構體保持一致,且亦能夠直接訪問其成員。

問題2:類為什么不屬于一代數(shù)據(jù)結構?

解答:類的有些成員不屬于能夠“原生實現(xiàn)”的部分。一代數(shù)據(jù)結構的成員都是能夠“原生實現(xiàn)”的。

三、基本數(shù)據(jù)類型

利用一代數(shù)據(jù)類型和數(shù)據(jù)結構,總結(抽象)出能夠處理現(xiàn)所有文本的基本內容,同時,基本數(shù)據(jù)類型也是數(shù)據(jù)處理過程中基本單位。

至此,現(xiàn)今所有編程語言通用的數(shù)據(jù)類型就能夠和大家見面了。

基本數(shù)據(jù)類型是對底層數(shù)據(jù)類型的封裝與實現(xiàn),即包裝。基本數(shù)據(jù)類型內部的處理必須是面向過程和指令式的。不同基本數(shù)據(jù)類型的實現(xiàn)方式可以產(chǎn)生差異,而在使用過程中,這些差異體現(xiàn)在數(shù)據(jù)處理的效率和精度上。

基本數(shù)據(jù)類型可以劃分為:布爾型(bool)、字符型(char)、整型(包含不同寬度、有無符號byte、short、int、long、long long)、浮點型(float或double)、字符串型(string)、空類型(void或null)

例如:浮點型能夠使用整型進行實現(xiàn),也能夠使用字符串進行實現(xiàn)。使用整型實現(xiàn),處理效率高,但無法完全保證精度(可能精度高、可能精度低);使用字符串進行實現(xiàn),處理效率較低,但能夠完全保證精度。

需要注意的是,無論是哪種編程語言(至少是通用編程語言),除非語言領域有特定限制,那么必須包含上述6種基本數(shù)據(jù)類型,但編程語言實現(xiàn)中,不同語言的類型名稱可能不一樣,但類型處理方式要能夠符合基本數(shù)學原理。

問題:為何要說類型處理方式要能夠符合基本數(shù)學原理?

解答:整型相加必是整型,不太可能是浮點型。當然,“符合”也未必“完全遵守”。

四、復合數(shù)據(jù)類型

使用基本數(shù)據(jù)類型與一代數(shù)據(jù)結構(或類型)能夠組合出用戶(程序員)期望的數(shù)據(jù)結構或類型,同時復合數(shù)據(jù)類型的運算方式需要被重新定義。這些數(shù)據(jù)類型能夠用于更為復雜的數(shù)據(jù)處理場景中,如高級語言編譯器的設計與實現(xiàn)、數(shù)據(jù)庫操作行為的設計與實現(xiàn)等。

復合數(shù)據(jù)類型已經(jīng)處于編程語言特性之上,能夠使用數(shù)學語言進行描述,本身已經(jīng)脫離了編程語言的限制,是通用編程語言實現(xiàn)面向不同領域的基礎。復合數(shù)據(jù)類型要求包含一定的設計思想,無論是面向過程還是面向對象,都要有封裝、接口的概念,這也是“通用編程語言語言技術”的重要研究對象。

五、數(shù)據(jù)

在程序中,萬物皆數(shù)據(jù);而在用戶(程序員)的角度,亦是如此。即使是函數(shù),也是數(shù)據(jù)的一種。但是對于函數(shù)而言,數(shù)據(jù)是能夠參與運算的最小單位。

數(shù)據(jù)必須包含數(shù)據(jù)在內存中的地址、數(shù)據(jù)的類型、數(shù)據(jù)的操作方式。

為了隱藏細節(jié),現(xiàn)存的大多編程語言基本采用在定義語句中體現(xiàn)數(shù)據(jù)的以上特征。(如此說是因為在個別編程語言中,支持在使用中完成數(shù)據(jù)的定義或重定義。)

以C語言為例:

int number = 10;

這一段代碼的含義是在內存中存儲一個初始值為10的、且操作方式為4個字節(jié)的數(shù)據(jù)。

那么“number”呢?通過編程語言的標準文檔說明,我們知道“number”是上述數(shù)據(jù)的標識符。實際上,在程序運行過程中,“number”這個字符串是不存在的,只是為了寫給人看的。

于是引出以下定義:

標識符是有效數(shù)據(jù)存儲在內存中物理地址的字符化表示。

但是這個定義缺少對于數(shù)據(jù)類型的涵蓋,所以我們還需要對“數(shù)據(jù)類型”進行定義:

數(shù)據(jù)類型是有效數(shù)據(jù)在內存中存儲方式、操作方式的約束。

以上就是通用編程語言技術的最重要的“基石”部分。當我們處理某一個程序錯誤時,我們就能夠利用這些理論基礎為解決問題找到較好的答案。當然,解決程序錯誤也不能只靠這些。

本章內容不需要完全理解,重點在于“數(shù)據(jù)、數(shù)據(jù)類型出現(xiàn)的原因”。

非常規(guī)入門之一:通用編程語言技術基礎(一)的評論 (共 條)

分享到微博請遵守國家法律
舟曲县| 南通市| 尉犁县| 垫江县| 茂名市| 武山县| 满城县| 西林县| 大渡口区| 天峻县| 铜川市| 紫阳县| 临洮县| 甘洛县| 白玉县| 小金县| 合山市| 福建省| 桂东县| 吉水县| 磴口县| 祁门县| 贵溪市| 洪洞县| 静安区| 四川省| 铅山县| 大宁县| 新疆| 双辽市| 天长市| 边坝县| 余江县| 台中市| 聊城市| 达孜县| 阳曲县| 延庆县| 华宁县| 绥阳县| 仁怀市|