小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

深入理解計算機系統(tǒng)——信息的存儲和表示

 youxd 2017-09-14

1、信息的存儲

什么是信息?信息是客觀事物屬性的反映,是經(jīng)過加工處理并對人類客觀行為產(chǎn)生影響的數(shù)據(jù)表現(xiàn)形式。

那么我們這里也要提一下什么是數(shù)據(jù),數(shù)據(jù)是反應(yīng)客觀事物屬性的記錄,是信息的具體表現(xiàn)形式。任何事物的屬性都是通過數(shù)據(jù)來表示的,數(shù)據(jù)經(jīng)過加工處理后成為信息,而信息必須通過數(shù)據(jù)才能傳播,才能對人類產(chǎn)生影響。

例如,數(shù)據(jù)2、4、6、8、10、12是一組數(shù)據(jù),其本身是沒有意義的,但對它進行分析后,就可得到一組等差數(shù)列,從而很清晰的得到后面的數(shù)字。這便對這組數(shù)據(jù)賦予了意義,稱為信息,是有用的數(shù)據(jù)。

計算機內(nèi)所有的信息均以二進制的形式表示,也就是由值0和值1組成的序列。大多數(shù)計算機使用8位的塊,或者說字節(jié)('位(bit)'是電子計算機中最小的數(shù)據(jù)單位,每一位的狀態(tài)只能是0或1。8個二進制位構(gòu)成1個'字節(jié)(Byte)'),來作為最小的可尋址的存儲器單位,而不是在存儲器中訪問單獨的位。

也就是說我們訪問計算機最小的單位是八個位構(gòu)成的字節(jié),而不是值0或值1的單個位。

程序會將存儲器視為一個非常大的字節(jié)數(shù)組,稱為虛擬存儲器(virtual memory)。存儲器的每一個字節(jié)都由唯一的數(shù)字來標識,也就是我們說的地址(address),所有可能地址的集合稱為虛擬地址空間(virtual address space)

比如 C 語言中的一個指針的值,無論它是指向一個整數(shù)、一個結(jié)構(gòu)或是某個其他程序的對象,都是某個存儲塊的第一個字節(jié)的虛擬地址。

編譯器和系統(tǒng)運行時是如何將存儲器空間劃分為更可管理的單元,用來存放不同的程序?qū)ο?。這個后面會詳細介紹。

2、十六進制表示法

一個字節(jié)由 8 位組成。在二進制表示法中,它的值域為 00000000——11111111;如果用十進制表示就是0——255。這兩種表示法用來描述計算機中的位模式(計算機中所有二進制的0、1代碼所組成的數(shù)字串)來說都不是很方便。二進制表示法太冗長,而十進制表示法與位模式的互相轉(zhuǎn)化又比較麻煩。這時候 十六進制數(shù)產(chǎn)生了,十六進制使用數(shù)字‘0’~‘9’,以及字符 ‘A’~'F’來表示16個可能的值。一般是 0x 或者 0X 開頭。規(guī)則是:借一當十六,逢十六進一。

比如十進制數(shù) 175,我們用十六進制表示為 0xAF。

十六進制與十進制、二進制之間的互相轉(zhuǎn)換這里就不詳細講解了,相信了解編程的對這個應(yīng)該是很熟悉了。

3、字

計算機進行數(shù)據(jù)處理時,一次存取、加工和傳送的數(shù)據(jù)長度稱為字(word),一個字通常由一個或多個(一般是字節(jié)的整數(shù)位)字節(jié)構(gòu)成,字的位數(shù)叫做字長(word size),每臺計算機都有一個字長,用來指明整數(shù)和指針數(shù)據(jù)的標稱大小(nominal size)。由于虛擬地址空間中的地址就是使用一個字來編碼的,因此字長決定了系統(tǒng)的虛擬地址空間的最大大小。

通俗來講:字長是CPU的主要技術(shù)指標之一,指的是CPU一次能并行處理的二進制位數(shù),字長總是8的整數(shù)倍,通常PC機的字長為16位(早期),32位,64位。

比如:LZ 打開命令提示符,然后輸入 systeminfo,可以看到處理器的位數(shù)是 64 位

深入理解計算機系統(tǒng)——信息的存儲和表示

也就是說 LZ 的電腦字長為 64 位,不過現(xiàn)在基本上 CPU 都是64 位的,但是為了發(fā)揮64位字長的優(yōu)勢,我們必須與64位軟件相輔相成,比如你得安裝64位操作系統(tǒng),否則的話,在32位軟件系統(tǒng)中64位字長的CPU只能當32位用。

4、數(shù)據(jù)大小

計算機和編譯器支持多種不同方式編碼的數(shù)字格式,比如整數(shù)和浮點數(shù),以及其它長度的數(shù)字。而且由于計算機位數(shù)的不同,會造成計算機在各種數(shù)據(jù)類型分配的字節(jié)數(shù)不一樣。下圖是 C 語言在 32位機器和64 位機器上各種類型所分配的字節(jié)數(shù)對比。

深入理解計算機系統(tǒng)——信息的存儲和表示

我們可以看出,對于長長整形(long long int)以及字符指針類型(char *)來說,在32位和64位系統(tǒng)下的字節(jié)數(shù)是不同的。所以在編程時,考慮到系統(tǒng)的移植性,這是我們必須要考慮的。

注意:對于指針類型,由于指針指向的是地址,而虛擬空間的大小是由字長決定的。所以在32位系統(tǒng)下,指針大小為4個字節(jié),在64位系統(tǒng)下,指針大小為8個字節(jié)。

5、尋址和字節(jié)順序

對于跨越多個字節(jié)的程序?qū)ο螅ǔ绦驅(qū)ο笾钢噶?、?shù)據(jù)或者控制信息等,是程序當中對象的統(tǒng)稱)來說,我們需要制定兩個規(guī)則:

①、這個對象的地址是什么?

②、在存儲器中如何排列這些字節(jié)?

在幾乎所有的機器上,多字節(jié)對象都被存儲為連續(xù)的字節(jié)序列,對象的地址為所使用字節(jié)中最小的地址。

比如:假設(shè)一個類型為 int 的變量 x 地址為 0x100,也就是說地址表達式 &x 的值是 0x100,那么,x 的 4 個字節(jié)將被存儲在存儲器的 0x100,0x101,0x102,0x103的位置。

第一個規(guī)則解決了,那么第二個規(guī)則如何排列呢?采用如下兩種方式:

小端法:按照從最低有效字節(jié)到最高有效字節(jié)的順序存儲對象,也就是最低有效字節(jié)在最前面。

大端法:和小端法相反。是按照從最高有效字節(jié)到最低有效字節(jié)的順序存儲對象,也就是最高有效字節(jié)在最前面。

回到上面的變量 x,如果假設(shè) x 的高位字節(jié)值到低位字節(jié)值分別為 67,45,23,01。那么用大端法和小端法表示分別如下:

深入理解計算機系統(tǒng)——信息的存儲和表示

由于排列字節(jié)的方式有兩種,那么這就產(chǎn)生問題了。比如當小端法機器產(chǎn)生的數(shù)據(jù)被發(fā)送到大端法機器或者反方向發(fā)送的時候就會發(fā)現(xiàn),接收程序里的字節(jié)成了反序。

為了避免這種情況,網(wǎng)絡(luò)應(yīng)用程序的代碼編寫必須遵循已建立的關(guān)于字節(jié)順序的規(guī)則,以確保發(fā)送方機器將它的內(nèi)部表示轉(zhuǎn)換成網(wǎng)絡(luò)標準,而接收方機器則將網(wǎng)絡(luò)標準轉(zhuǎn)換為它的內(nèi)部表示。

6、數(shù)據(jù)類型

上面我們在講解第4小點數(shù)據(jù)大小時,我們給出了 C 語言中很多的數(shù)據(jù)類型。那么數(shù)據(jù)類型到底是什么呢?

程序編碼中,計算機是不認識我們所定義的數(shù)據(jù)類型的。數(shù)據(jù)類型的出現(xiàn)是為了把數(shù)據(jù)分成所需內(nèi)存大小不同的數(shù)據(jù),編程的時候需要用大數(shù)據(jù)的時候才定義大數(shù)據(jù)類型,然后編譯器編譯標記需要申請大內(nèi)存,就可以充分利用內(nèi)存。 例如大胖子必須睡雙人床,就給他雙人床,瘦的人單人床就夠了。

那么我們可以根據(jù)上面的尋址和字節(jié)順序得出,計算機在解釋一個數(shù)據(jù)類型的值時主要有四個因素:位排列規(guī)則(大端或者小端)、起始位置、數(shù)據(jù)類型的字節(jié)數(shù)、數(shù)據(jù)類型的解釋方式。

對于特定的系統(tǒng)來說,前兩種因素都是特定的,而對于后兩種因素的改變,則可以改變一個數(shù)據(jù)類型的值的最終計算結(jié)果,這就是強制類型轉(zhuǎn)換。對于大部分高級程序設(shè)計語言來講,都提供了強制類型轉(zhuǎn)換。強制類型轉(zhuǎn)換有時候會讓結(jié)果變的讓人難以預(yù)料,所以我們需要慎用。

7、字符串的表示

在計算機中,對非數(shù)值的文字和其他符號進行處理時,要對文字和符號進行數(shù)字化,即用二進制編碼來表示文字和符號。其中西文字符最常用到的編碼方案有ASCII編碼和EBCDIC編碼。對于漢字,我國也制定的相應(yīng)的編碼方案,比如 GBK,GB2312等。

比如字符 ‘a(chǎn)’ 的 ASCII 碼十進制值為 97,在計算機中用二進制表示就是 01100001

8、代碼的表示

程序其實就是一個二進制序列的簡單描述,編譯器會幫我們將其翻譯成對應(yīng)的機器所認識的二進制序列。

9、總結(jié)

本篇博客主要講解了信息在計算機中是如何存儲和表示的,需要注意的是我們訪問計算機最小的單位是八個位構(gòu)成的字節(jié),而不是值0或值1的單個位。下一篇博客我們將介紹布爾代數(shù)以及C語言中的位運算。


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多