當前位置:首頁 » 服務存儲 » 計算機系統存儲編碼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

計算機系統存儲編碼

發布時間: 2022-05-20 12:24:06

① 32位計算機內存地址編碼范圍

對於32位的計算機,其內存地址編碼范圍是0*0000000~0*FFFFFFFF,其中,0*的意思是0x,是16進制數表示的前綴,意思是這個數是16進制數.
32位系統支持多大內存?一般32位系統只支持最大3.25G內存(通常是3G上下)。如果讓32位系統支持4G以上大內存,其實也其他方法,只需安裝一個PrimoRamdisk
虛擬內存檔軟體!
需要注意:Win7等32位系統無法使用4G內存的原因及解決方法:
http://wenku..com/view/58daabeef8c75fbfc77db2c2.html

② 在計算機內存中,存儲每個ASCII 碼字元編碼需用( )個位拜託各位了 3Q

號從0開始到127,所以答案是7位二進制沒有錯。但由於浪費了1位,所以又進行了改進,添加了一些製表符,從而將8位全部使用,而現在的計算機系統中使用的ascii,全部使用擴展的ascii,但平時不再說擴展ascii碼。都稱為ascii。所以說8位也沒有錯。這道題有一個時間概念沒有說明,估計是編書的人都是在抄襲別人的說法,將早期的題目延續至今。若題目前面加上時間定語「當今」或「現在」,該題的答案就只能是8位二進制。原因是現在的計算機只能一次訪問一個位元組。位元組是存儲設備的最小單位。而早期不是如此。

麻煩採納,謝謝!

③ 字元在計算機中的存儲形式

字元在計算機內存放,應規定相應的代表字元的二進制代碼。代碼的選用要與有關外圍設備的規格取得一致。這些外圍設備包括鍵盤控制台的輸入輸出、列印機的輸出等等。字元作輸入時,要自動轉換為二進制代碼存於機內;輸出時,計算機內二進制代碼自動轉化為字元,兩者的轉換全是靠外圍設備實現的。字元是數據結構中最小的數據存取單位。通常由8個二進制位(一個位元組)來表示一個字元,但也有少數計算機系統採用6個二進制的字元表示形式。一個系統中字元集的大小,完全由該系統自己規定。[1]計算機可用字元一般為128~256個(不包括漢字時),每個字元進入計算機後,都將轉換為8位二進制數。不同的計算機系統和不同的語言,所能使用的字元范圍是不同的。
在 ASCII 編碼中,一個英文字母字元存儲需要1個位元組。在 GB 2312 編碼或 GBK 編碼中,一個漢字字元存儲需要2個位元組。在UTF-8編碼中,一個英文字母字元存儲需要1個位元組,一個漢字字元儲存需要3到4個位元組。在UTF-16編碼中,一個英文字母字元或一個漢字字元存儲都需要2個位元組(Unicode擴展區的一些漢字存儲需要4個位元組)。在UTF-32編碼中,世界上任何字元的存儲都需要4個位元組。[3]
表達
字元是可使用多種不同字元方案或代碼頁來表示的抽象實體。例如,Unicode UTF-16 編碼將字元表示為 16 位整數序列,而 Unicode UTF-8 編碼則將相同的字元表示為 8 位位元組序列。[3]微軟的公共語言運行庫使用 Unicode UTF-16(Unicode 轉換格式,16 位編碼形式)表示字元。
作用
針對微軟公共語言運行庫的應用程序使用編碼將字元表示形式從本機字元方案映射至其他方案。應用程序使用解碼將字元從非本機方案映射至本機方案。
電腦和通訊設備會使用字元編碼的方式來表達字元。意思是會將一個字元指定給某個東西。傳統上,是代表整數量的位元序列,如此,則可透過網路來傳輸,同時亦便於儲存。兩個常用的例子是ASCII和用於統一碼的UTF-8。根據谷歌的統計,UTF-8是最常用於網頁的編碼方式。相較於大部分的字元編碼把字元對應到數字或位元串,摩斯密碼則是使用不定長度的電子脈沖的序列來表現字元

④ 在計算機系統中,應用最為廣泛的字元編碼是什麼

在電腦系統中,應用最為廣泛的字元編碼是ASCII碼。
美國信息交換標准碼是由美國國家標准學會(American
National
Standard
Institute,ANSI)制定的,標準的單位元組字元編碼方案,用於基於文本的數據。起始於50年代後期,在1967年定案。它最初是美國國家標准,供不同計算機在相互通信時用作共同遵守的西文字元編碼標准,它已被國際標准化組織(ISO)定為國際標准,稱為ISO646標准。適用於所有拉丁文字字母。
ASCII碼使用指定的7位或8位二進制數組合來表示128或256種可能的字元。標准ASCII碼也叫基礎ASCII碼,使用7位二進制數來表示所有的大寫和小寫字母,數字0到9、標點符號,以及在美式英語中使用的特殊控制字元(這里需要特別注意:ASCII碼與標准ASCII碼的位數上的區分,標准ASCII碼是7位二進製表示)。在電腦里,數字和字母都是用ASCII碼來存儲的,這就是為什麼一個英文字母或半形的數字、標點符號通常佔一個位元組的原因。
由於電路的復雜性因素,電腦里都使用二進制數,它只有0和1兩個數碼,逢二進一,最容易用電路來表達,比如0代表電路不通,1代表電路通暢。我們平時用電腦時感覺不到它是在用二進制計算是因為電腦會把你輸入的信息自動轉換成二進制,算出的二進制數再轉換成你能看到的信息顯示到屏幕上。文字和數字與二進制數之間的轉換一般就靠ASCII碼來操作。

⑤ 漢字在漢字在計算機中的存儲編碼

漢字信息處理系統一般包括編碼、輸入、存儲、編輯、輸出和傳輸。編碼是關鍵。不解決這個問題,漢字就不能進入計算機。
漢字進入計算機的三種途徑
分別為:
①機器自動識別漢字:計算機通過「視覺」裝置(光學字元閱讀器或其他),用光電掃描等方法識別漢字。
②通過語音識別輸入:計算機利用人們給它配備的「聽覺器官」,自動辨別漢語語音要素,從不同的音節中找出不同的漢字,或從相同音節中判斷出不同漢字。
③通過漢字編碼輸入:根據一定的編碼方法,由人藉助輸入設備將漢字輸入計算機。
機器自動識別漢字和漢語語音識別,國內外都在研究,雖然取得了不少進展,但由於難度大,預計還要經過相當一段時間才能得到解決。在現階段,比較現實的就是通過漢字編碼方法使漢字進入計算機。

⑥ 字母「a」的ASCII碼是「1100001」,那麼字母「b」在計算機存儲器中是

字母「a」的ASCII碼是「1100001」,那麼字母「b」在計算機存儲器中是「1100010」。

ASCII 碼使用指定的8 位二進制數組合來表示128 或256 種可能的字元。使用7 位二進制數(剩下的1位二進制為0)來表示所有的大寫和小寫字母,數字0 到9、標點符號,以及在美式英語中使用的特殊控制字元。因為,字母「b」在字母「a」的後面,所以,為ASCII碼1100001+1=1100010。

(6)計算機系統存儲編碼擴展閱讀:

0~31及127(共33個)是控制字元或通信專用字元(其餘為可顯示字元),它們並沒有特定的圖形顯示,但會依不同的應用程序,而對文本顯示有不同的影響 。32~126(共95個)是字元(32是空格),其中48~57為0到9十個阿拉伯數字。

65~90為26個大寫英文字母,97~122號為26個小寫英文字母,其餘為一些標點符號、運算符號等。後128個稱為擴展ASCII碼。許多基於x86的系統都支持使用擴展(或「高」)ASCII。

⑦ 計算機中的數據和編碼

計算機編碼
在計算機用戶中普遍存在的一個誤解是計算機對數值計算的絕對准確性。也就是說,如果您做乘法:

3 × (1/3)
您本來期望的到一個准確的1這個結果。但是您發現計算機並沒有給出這個結果,而卻只是一個近似的值,類似於0.99999999923475。

這看起來似乎是系統的一個「臭蟲」,但是更令人吃驚的是,對,計算機就是那樣工作的(除了在計算機代數系統中)。這篇文章將詳細解釋這個問題。

位、位元組、半位元組和無符號整數
幾乎所有的計算機用戶都了解「 位 」的概念。在計算機中,通過開關變化設置表達值0或1。如果您有兩個位可供選擇,您可以很容易得到這樣四個不同的狀態:

00 01 10 11
如果您有三個位,您可以把它們表示成八種狀態:

000 001 010 011 100 101 110 111
每當您增加一個位時,您將得到兩倍的狀態。

很多計算機使用八位來表示信息,有些則為多八位,例如16位,32位或64位。8位作為一個組通常被用作基礎單位,並且使用另外一個詞「比特」(byte)。計算機的處理器一次處理一個八位或八位的倍數個信息。儲存器使用一個八位或多個八位來存儲數據。

事實上,在一些情況下使用四位來處理問題會更方便,這種四位一組的數據通常被稱為一個「nybble」。但實際上,更常用的是「比特」而不是「nybble」。

一個nybble可以為16種不同的情況編碼,例如數字0到15。大體上,使用任何序列的排列來表示不同的16種狀態是可以的,但在實際的應用通常是這樣的:

0000 = 十進制0 1000 = 十進制8 0001 = 十進制1 1001 = 十進制9 0010 = 十進制2 1010 = 十進制10 0011 = 十進制3 1011 = 十進制11 0100 = 十進制4 1100 = 十進制12 0101 = 十進制5 1101 = 十進制13 0110 = 十進制6 1110 = 十進制14 0111 = 十進制7 1111 = 十進制15
這樣的表示是很自然的,因為它符合我們所熟悉的十進制數表示方法。例如,給定一個十進制數:

7531
我們很自然地把它理解為:

7 × 1000 + 5 × 100 + 3 × 10 + 1 × 1
或者,使用10的冪來表示:

7 × 10 3 + 5 × 10 2 + 3 × 10 1 + 1 × 10 0
注意任何數(除了0)的0次冪都是1。

數據中的每個數字表示從0到9的值,這樣我們有10個不同的數字,那就是我們把它稱為「十進制」的原因。每個數字可以通過10的某次冪來決定它的位置。這聽起來很復雜,但實際上並不是這樣的。這正是當您讀一個數字的使用認為是理所當然的事情,您甚至都不同仔細思考它。

類似地,使用二進制編碼就像上面所說的那樣,值13是這樣編碼的:

1101
每一個位置有兩個數字可以選擇,所以我們稱它為「二進制」。因此,它們的位置是這樣決定的:

1101 =
1 × 2 3 + 1 × 2 2 + 0 × 2 1 + 1 × 2 0 =
1 × 8 + 1 × 4 + 0 × 2 + 1 × 1 = 13(十進制)
注意這里使用了2的冪:1、2、4和8。痴迷於計算機的人通常可以記住2的從2到16次冪,這並不是因為他們的記憶力,而是因為它們大量的使用這些數字:

2 0 = 1 2 8 = 256 2 1 = 2 2 9 = 512 2 2 = 4 2 10 = 1 024 2 3 = 8 2 11 = 2 048 2 4 = 16 2 12 = 4 096 2 5 = 32 2 13 = 8 192 2 6 = 64 2 14 = 16 384 2 7 = 128 2 15 = 32 768 2 16 = 65 536
注意的是,根據公制單位,值2 10 = 1 024通常被提及為「kilo」(千),或簡寫成「K」,所以很多2的高次冪通常可以簡寫成:

2 11 = 2 K = 2 048 2 12 = 4 K = 4 096 2 13 = 8 K = 8 192 2 14 = 16 K = 16 384 2 15 = 32 K = 32 768 2 16 = 64 K = 65 536
同樣的,值2 20 = 1 024 x 1 024 = 1 048 576通常被簡寫成「M」:

2 21 = 2 M 2 22 = 4 M
而2 30 曾被稱為「吉」,或「G」。下面我們將會大量使用這些修飾符號。

有一個很微妙的話題。如果我們使用16位,我們可以得到65 536種不同的值,但是這些值是從0到65 535的。人們通常從1開始數數,但是計算機是從0開始計數的。因為這對它們來說更簡便。這個小問題有時也會使得計算機混淆。

現在,我們得到了計算位的方法:

您只能在您所有的位的范圍內進行算術操作。也即是說,如果您正在使用的是16位,那您不能對65 535或更大的數據進行操作,否則您將得到一個「數據溢出」的錯誤。這個術語表明,您正在進行的是「有限精度」的操作。
使用這種編碼不能表示小數。您只能使用非小數的「整數」。
使用這種編碼不能表示負數。所有的數字都是「無符號數」。
雖然有這種限制,但是在計算機中對於簡單的增1計數來說,「無符號整數」還是十分有用的。它們對計算機來說是很容易處理的。通常計算機使用16位或32位無符號整數,通常被稱為「整數(integer)」或「長整數(long integer)」。一個整數允許對從0到65 535的數據進行操作,而一個長整型允許對從0到4 294 967 295的數進行操作。

八進制和十六進制數
現在讓我們討論一些偏外的話題:對二進制數字的表示方法。計算機通常使用二進制來表達數據,但是在實際中如果使用像這樣的二進制:

1001 0011 0101 0001
那將是一件痛苦的事,並且很容易出錯。通常計算機使用一個基於二進制的表達方式:八進制,或更通常使用的,十六進制。

這一件聽起來挺狡猾但實際上又很簡單的事。如果不是這樣的話,我們就不會這樣使用了。在平常的十進制體系中,我們有10數字(0到9)按以下方式構成排列:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...
在八進制中,我們只有八個數字(0到7)按以下方式構成排列:

0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 21 22 23 24 25 26 ...
也即是說,八進制的「10」相當於十進制的「8」,八進制的「20」相當於十進制的「16」,以此類推。

在十六進制中,我們只有十六個數字(0到9,然後是從a到f)按以下方式構成排列:

0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 ...
也即是說,十六進制的「10」相當於十進制的「16」,十六進制的「20」相當於十進制的「32」。

這些表示數值的方法都是表位置的系統,但是它們使用的不是像十進制那樣的10,而是分別使用8和16。例如:

八進制756
= 7 × 8 2 + 5 × 8 1 + 6 × 8 0
= 7 × 64 + 5 × 8 + 6 × 1
= 448 + 40 + 6 = 十進制494
十六進制3b2
= 3 × 16 2 + 11 × 16 1 + 2 × 16 0
= 3 × 256 + 11 × 16 + 2 × 1
= 768 + 176 + 2 = 十進制946
好了,如果您還不是那麼明白,不用擔心。我們想說明的是,對於八進制來說,他們剛好和3位二進制有一個完美的對應關系:

000 = 八進制0
001 = 八進制1
010 = 八進制2
011 = 八進制3
100 = 八進制4
101 = 八進制5
110 = 八進制6
111 = 八進制7
類似的,一個十六進制數剛好和一個4位的二進制數對應。

0000 = 十六進制0 1000 = 十六進制8 0001 = 十六進制1 1001 = 十六進制9 0010 = 十六進制2 1010 = 十六進制a 0011 = 十六進制3 1011 = 十六進制b 0100 = 十六進制4 1100 = 十六進制c 0101 = 十六進制5 1101 = 十六進制d 0110 = 十六進制6 1110 = 十六進制e 0111 = 十六進制7 1111 = 十六進制f
因此,把一個很長的二進制數轉換成一個八進制就變得很簡便,例如:把二進制1001001101010001轉化成八進制:

1 001 001 101 010 001 二進制 = 111521 八進制
轉換成十六進制會更簡單:

1001 0011 0101 0001 = 9351 十六進制
但是要把它轉換成十進制(37 713)就比較麻煩了。八進制和十六進制使得轉換二進制機器級的數字變得簡單方便。

有符號整數和補碼
在定義了無符號二進制數後,我們就要著手定義負數了,或稱為「有符號整數」。最簡單的一個方法是保留一個位來表示數值的符號。這個「符號位」可以位於數值的最左邊,當然也可以位於數值的最右邊。如果這個符號位為0,表示數值是正的,如果這個符號位為1,表示數值是負的。

這樣做是可以的,雖然從人類的角度來看是最明顯的解決方案,但是它對於計算機來說有可能帶來一些難度。例如,這種編碼使得0可以有正負兩種。人們可能對此感到不可思議,但是這對計算機來說是適應的。

對計算機來說,更自然的表達方式是對給定的位數的二進制數按其范圍分成兩半,其中前一半用來表示負數。例如,在4位數值中,你可以得到:

0000 = 十進制0 0001 = 十進制1 0010 = 十進制2 0011 = 十進制3 0100 = 十進制4 0101 = 十進制5 0110 = 十進制6 0111 = 十進制7 1000 = 十進制-8 1001 = 十進制-7 1010 = 十進制-6 1011 = 十進制-5 1100 = 十進制-4 1101 = 十進制-3 1110 = 十進制-2 1111 = 十進制-1
現在我們得到了一個「有符號整數」數字系統,使用所知道的,為了一些不是很重要的原因,「補碼」編碼方式。對16位有符號數字編碼來說,我們可以得到范圍為-32 768到32 767的有符號數字。對一個32位的有符號編碼系統來說,我們可以為從-2 147 483 648到2 147 482 647的數編碼。

與只改變符號位來表示負數的編碼方式相比,「補碼」編碼方式與之有所不同。例如對於-5來說,只對符號位編碼,應該是:

1101
但是對於「補碼」編碼方式來說,則是:

1011
這對於符號編碼來說是-3。關於為什麼計算機要使用補碼這種編碼方式我們會在後面解釋。

所以,現在我們可以以二進制方式來表示正負兩種不同的數值。請記住對於一個二進制數來說,只有兩種解釋方式。如果在內存中有一個這樣的二進制數值:

1101
-- 這只能解釋為十進制的「13」或「-3」。

定點小數
這種格式通常被用於商業計算(例如在電子表格或COBOL中);因為在這里,丟棄小數位來記錄金錢是不能接受的。因此了解二進制如何存貯小數是十分有用的。

首先去我們必須決定要用多少位來存貯小數部分和多少位來存儲整數部分。假設我們使用32位來表示這種格式,那麼我們用16位表示整數部分,16位來表示小數部分。

小數部分怎麼使用呢?這沿用了表示整數的方式:如果8位接下來是4位,是2位,1位,那麼當然接下來就是半位,1/4位和1/8位等等了。

例如:

整數位 小數位 0.5 = 1/2 = 00000000 00000000.10000000 00000000 1.25 = 1 1/4 = 00000000 00000001.01000000 00000000 7.375 = 7 3/8 = 00000000 00000111.01100000 00000000
有一點棘手的是,如果您要表達1/5(十進制的0.2),那您不能得到精確的數值表達方式。最好的方法只能是:

13107/65536 = 00000000 00000000.00110011 00110011 = 0.1999969... 十進制
13108/65536 = 00000000 00000000.00110011 00110100 = 0.2000122... 十進制
然而不,您不能只樣做,既是你有更多的數位來表達。問題是,一些小數使用二進制的方式不能精確地表達出來。除非您使用一個特殊的辦法。這個特殊的辦法是分別使用兩個數字來表達小數:一個是分子,一個是分母。然後您可以使用學校學習的加、減、乘、除來得到它們。然而,這些方法不能表達更高級的數字(例如平方根),或者如果這兩個分母的最小公倍數很大的話,那就難以使用。這就是使用定點小數表達小數的優點。

浮點小數
當我們使用了有符號和無符號的數值表達方式時。如果遇到連32位也不足以表達的大范圍的數,或也許可以表達,但我們必須為此放棄小數位時,我們可以選擇的以獲得更大范圍的數值的表達方式的方法是使用「浮點小數」格式而拋棄「定點小數」格式。

在十進制中,我們對以下的表達方式很熟悉:

1.1030402 × 10 5 = 1.1030402 × 100000 = 110304.02
或簡寫成:

1.1030402E5
這表示「1.103402乘以一個1後面跟著5個零的數」。我們可以得到一個確定的稱謂「尾數」的數值(1.1030402),乘以一個10的某個冪級數(E5,表示10 5 或100 000),也就是「冪級數」。如果我們使用一個負的冪級數,那就意味著乘以該正級數的倒數。例如:

2.3434E-6 = 2.3434 × 10 -6 = 2.3434 × 0.000001 = 0.0000023434
使用這種定義的好處是我們可以得到更大范圍的數值,雖然尾數部分的精確度受到影響。相似的原理可以應用於二進制中為計算機使用。人們設計了很多方式,但是作常用的是由美國電器和電子工程師協會定義的一種方法。它對64位浮點格式的定義是:

11位二進製表示指數,使用「超1023」格式。這種格式使得指數可以表示為0到2047的無符號數,但是在得到真實值前必須先減去1023;
52位尾數,使用無符號數字表示;
一個符號位;
下面我們使用一個例子來了解計算機如何使用內存的8位存儲這些數字:

第0位: S x10 x9 x8 x7 x6 x5 x4 第1位: x3 x2 x1 x0 m51 m50 m49 m48 第2位: m47 m46 m45 m44 m43 m42 m41 m40 第3位: m39 m38 m37 m36 m35 m34 m33 m32 第4位: m31 m30 m29 m28 m27 m26 m25 m24 第5位: m23 m22 m21 m20 m19 m18 m17 m16 第6位: m15 m14 m13 m12 m11 m10 m9 m8 第7位: m7 m6 m5 m4 m3 m2 m1 m0
其中的「S」表示符號位,「X」表示指數位(階碼?),「m」表示尾數位。一旦這些數字被讀取,它將轉換成:

<符號> × (1 + <小數形式的尾數>) × 2 <階碼> - 1023
這個方式提供的數字范圍為:

最大值 最小值
正數 1.797693134862231E+308 4.940656458412465E-324
負數 -4.940656458412465E-324 -1.797693134862231E+308

這種方式也定義了一些不是數字的值,例如「NaNs」(「不是一個數字」)。這通常用來返回表示數字溢出的信息。通常您不會碰到它,所以我們也不會對它進行進一步討論。一些程序使用32位浮點小數。最普遍的是使用32位尾數,1位符號位,8位階碼和「超127」格式。它提供7位十進制數字。

第0位: S x7 x6 x5 x4 x3 x2 x1 第1位: x0 m22 m21 m20 m19 m18 m17 m16 第2位: m15 m14 m13 m12 m11 m10 m9 m8 第3位: m7 m6 m5 m4 m3 m2 m1 m0
數字轉換時使用:

<符號> × (1 + <小數形式的尾數>) × 2 <階碼> - 127
它的范圍為:

最大值 最小值
正數 3.402823E+38 2.802597E-45
負數 -2.802597E-45 -3.402823E+38

通常我們可以把32位的二進制浮點數稱為「單精度」浮點數,而把64位的二進制浮點數稱為「雙精度」浮點數。如果我們使用real的時候,通常表示雙精度的浮點數;而使用float的時候,我們通常指單精度的浮點數。

但是要記住的是,位是位,它們在計算機的存儲是連續的,當計算機內存中有一個64位數據時,它可能是一個雙精度的浮點數,也可能是兩個單精度的浮點數,或4個有符號或無符號的整數,或其它8位的數據,這取決於計算機如何讀取它們。如果計算機把4個無符號整數以雙精度浮點小數方式讀出的話,它可以得到一個雙精度浮點小數,但這個數據可能是一個垃圾數據。

所以,現在雖然我們已經解決了正、負數的存貯方式,但是對於浮點數來說,仍然存在一些與整數一樣的缺陷,例如:

像整數一樣,浮點數也有范圍。雖然我們得到了比整數要大得多的范圍,但是仍然是有限的,如果您試圖把兩個很大的數乘起來,您可能會得到「數據上溢」的錯誤。而如果您把一個小的數字除以一個函大的數字,那就可能使得指數的數值出錯,出現「數據下溢」的錯誤。通常把最大值稱為「機器無窮」,因為它是計算機所能處理的最大的數字。
另一個問題是精度。雖然您有15位的數字來表示很大的數,但是擋對它進行四則運算的時候,它們可能不給您任何提示就把一些數字丟棄。這意味著,如果您把一個很小的數加到一個很大的數值上去的時候,由於這個數字太小,以至於15位或16位的精度都不能顯示它,計算機就會把這個數字丟棄。如果您在做計算的時候得到一個十分奇怪的數字,您可以需要檢查您的數據范圍是否合適。
這意味著,如果您做浮點計算,較小的數字很可能被丟棄了。雖然這在平常來說並不明顯,但是如果您是做要求很高的數學分析工作,這些錯誤可能會累積起來,以至於最後得到的結果十分不準確。
這個錯誤對進行數學研究的人來說十分重要,他們必須對誤差十分了解,以及研究一些辦法來減少誤差,並且應該可以估計到誤差的大小。
順便說一句,「精度」問題與「范圍」問題不同,前者指的是有關尾數的表示範圍,後者指的是指數的表達范圍。
另外一個不太明顯的誤差是由於浮點數的二進制和十進制並不完全相等。如果您操作的數好是2的冪級數的倒數,例如0.75,那是用二進制可以准確的標示為0.11,因為它剛好是1/2+1/4的值。可是不幸的是,您可能通常不會得到如此恰到好處的數字,這就是說,計算機會把一些數字丟掉,例如要表示0.1,只能使用無窮循環的二進制小數0.000110011……表示了。
如果您對這部分內容不理解,別擔心。這里的要點是,計算機不是萬能的,它只是一部機器,並要符合一定的規則和受到一定的限制。雖然很多人對計算機抱有孩子似的信任,但是在計算機雖好的解決方法下也有一些不可避免的不精確。

編程語言中的數
對於低級語言的編程者來說,他們要擔心有符號和無符號、定點和浮點數的運算。他們必須使用十分不同的代碼來實現操作。

但是,對高級語言的編程者來說,諸如LISP和 Python 提供了一些列諸如「有理數」、「復數」之類的抽象數據類型。而他們可以斷言他們的系統可以使用數學操作做正確的運算。由於操作符重載,數學運算可以應用於任何數字——無論是有符號的、無符號的、有理數、定點小數、浮點小數或復數。

文本編碼:ASCII和字元串
現在我們已經得到不同的方法來存儲數據了,那麼文本呢?我們怎麼存儲姓名、地址或寫給朋友的信件呢?

當然,如果您還記得位是位的話,我們沒有理由不能使用位來表達字母「A」或「?」獲「Z」之類的。因為很多計算機每次處理一個位元組,所以使用單位元組的數據來表達單個字母會很方便。我們可以使用這個:

0100 0110 (hex 46)
來表示字母「F」。計算機使用這樣的「字元編碼」來向顯示程序傳送要求的文本。

下面是一個用來存儲西方字母的標准二進制編碼,就是通常所說的「美國信息交換標准碼」(英文簡稱「 ASCII 」),下面的編碼為ASCII編碼,使用「d」表示十進制編碼,「h」表示十六進制代碼,「o」表示八進制代碼:

ASCII碼表 ______________________________________________________________________
ch ctl d h o ch d h o ch d h o ch d h o ______________________________________________________________________
NUL ^@ 0 0 0 sp 32 20 40 @ 64 40 100 ' 96 60 140 SOH ^A 1 1 1 ! 33 21 41 A 65 41 101 a 97 61 141 STX ^B 2 2 2 " 34 22 42 B 66 42 102 b 98 62 142 ETX ^C 3 3 3 # 35 23 43 C 67 43 103 c 99 63 143 EOT ^D 4 4 4 $ 36 24 44 D 68 44 104 d 100 64 144 ENQ ^E 5 5 5 % 37 25 45 E 69 45 105 e 101 65 145 ACK ^F 6 6 6 & 38 26 46 F 70 46 106 f 102 66 146 BEL ^G 7 7 7 ` 39 27 47 G 71 47 107 g 103 67 147
BS ^H 8 8 10 ( 40 28 50 H 72 48 110 h 104 68 150 HT ^I 9 9 11 ) 41 29 51 I 73 49 111 i 105 69 151 LF ^J 10 a 12 * 42 2a 52 J 74 4a 112 j 106 6a 152 VT ^K 11 b 13 _ 43 2b 53 K 75 4b 113 k 107 6b 153 FF ^L 12 c 14 44 2c 54 L 76 4c 114 l 108 6c 154 CR ^M 13 d 15 _ 45 2d 55 M 77 4d 115 m 109 6d 155 SO ^N 14 e 16 . 46 2e 56 N 78 4e 116 n 110 6e 156 SI ^O 15 f 17 / 47 2f 57 O 79 4f 117 o 111 6f 157
DLE ^P 16 10 20 0 48 30 60 P 80 50 120 p 112 70 160 DC1 ^Q 17 11 21 1 49 31 61 Q 81 51 121 q 113 71 161 DC2 ^R 18 12 22 2 50 32 62 R 82 52 122 r 114 72 162 DC3 ^S 19 13 23 3 51 33 63 S 83 53 123 s 115 73 163 DC4 ^T 20 14 24 4 52 34 64 T 84 54 124 t 116 74 164 NAK ^U 21 15 25 5 53 35 65 U 85 55 125 u 117 75 165 SYN ^V 22 16 26 6 54 36 66 V 86 56 126 v 118 76 166 ETB ^W 23 17 27 7 55 37 67 W 87 57 127 w 119 77 167
CAN ^X 24 18 30 8 56 38 70 X 88 58 130 x 120 78 170 EM ^Y 25 19 31 9 57 39 71 Y 89 59 131 y 121 79 171 SUB ^Z 26 1a 32 : 58 3a 72 Z 90 5a 132 z 122 7a 172 ESC ^[ 27 1b 33 ; 59 3b 73 [ 91 5b 133 { 123 7b 173 FS ^\ 28 1c 34 < 60 3c 74 \ 92 5c 134 124 7c 174 GS ^] 29 1d 35 = 61 3d 75 ] 93 5d 135 } 125 7d 175 RS ^^ 30 1e 36 > 62 3e 76 ^ 94 5e 136 ~ 126 7e 176 US ^_ 31 1f 37 ? 63 3f 77 _ 95 5f 137 DEL 127 7f 177 ______________________________________________________________________
上面這個列表的最左邊有一個些奇怪的字元,例如「FF」和「BS」,這些都不是文本字元。相反,它們是控制字元,也就是說當這些字元發送到特定的設備時,它將產生一些動作。例如「FF」表示換頁,或彈出;「BS」表示退格,而「BEL」表示一個響聲。在一個文本編輯器中,它們會顯示成一個白色或黑色的方塊,或笑臉、音符或其它一些奇怪的符號。要打出這些字元,可以使用CTRL鍵和一個合適的代碼。例如同時按住「CTRL」和「G」,或簡寫成「CTRL-G」或「^G」可以打出一個BEL字元。

上面這個ASCII碼表示定義了128個字元,這意味著ASCII碼只需要7位。但是,很多計算機都以位元組為單位存儲信息。這個額外的一位可以定義第二個128個字集,一個「擴展」字集。

在實際中,有很多不同的「擴展」字集,提供很多例如數學符號等的符號或非英語字元。這個擴展字集並沒有進行標准化,並經常會引起混淆。

這個表格強調了這篇文章的主題:位就是位。這樣的話,您可以使用位來表示字元。您可以把特殊的代碼描述成特殊的十進制、八進制和十六進制,但是它們仍然是相同的代碼。這些數值的表達,無論是十進制、八進制或十六進制,都只是相同的位的表達。

當然,您可能在一段話中表達很多的字元,例如:

Tiger tiger burning bright!
這只是簡單的替換成ASCII碼,表示成:

54 69 67 65 72 2c 20 74 69 67 65 72 20 62 75 ...
計算機把這種ASCII「字元串」以連續空間的「數組」來存儲。一些應用程序可以包括一個二進制數值表示字元串的長度,但是更通常的做法是使用一個表示結尾的字元NULL(ASCII表中的0字元〕表示字元串的結束。

請參看:

⑧ 計算機內數的表示與編碼

2、機器數的表示方法

a、原碼

1、定義:正數的符號位用0表示,負數的符號位用1表示,數值部分用二進制形式表示,稱為該數的原碼。
比如: 則
X=+81 (X)原 =0 1010001
Y=-81 (Y)原 =1 1010001
符號位 數值
2、用原碼表示一個數簡單、直觀、方便。但不能用它對兩個同號數相減或兩個異號數相加。

比如:將十進制數「+36」與「-45」的原碼直接相加:
X=+36 (X)原 =00100100
Y=-45 (Y)原 =10101101

0 0 1 0 0 1 0 0……(+36)10+) 1 0 1 0 1 1 0 1……(-45)10
1 1 0 1 0 0 0 1……(-81)10
這顯然是不對的。

b、反碼

定義:正數的反碼和原碼相同,負數的反碼是對該數的原碼除符號位外各位取反,即「0」變「1」,「1」變「0」。

例如:X=+81,Y=-81

X)原 =0 1010001 (X)反= 0 1010001

Y)原 =1 1010001 (Y)反= 1 0101110
符號位 數值 符號位 數值

c、補碼

1、定義:正數的補碼與原碼相同,負數的補碼是對該數的原碼除符號外各位取反,然後加1,即反碼加1。
比如:X=+81,Y=-81 (X)原=(X)反=(X)補=01010001
(Y)原=11010001
(Y)反=10101110
(Y)補=10101111

2、計算機中,加減法基本上都採用補碼進行運算,並且加減法運算都可以用加法來實現。
比如:計算十進制數:36-45,可 寫成:36+(-45),即
(36)10 -(45)10 =(36)10+(-45)10
(36)原 =(36)反 = (36)補
= 00100100

(-45)原 = 10101101
(-45)反 = 11010010
(-45)補 = 11010011

0 0 1 0 0 1 0 0……(+36)10
+) 1 1 0 1 0 0 1 1……(-45)10
1 1 1 1 0 1 1 1……(-9)10
結果正確。

三、字元編碼

所謂字元編碼就是規定用怎樣的二進制編碼來表示文字和符號。它主要有以下幾種:1、BCD碼(二--十進制碼);2、ASCII碼;3、漢字編碼。

1、BCD碼(二--十進制碼):
把十進制數的每一位分別寫成二進制數形式的編碼,稱為二--十進制編碼或BCD編碼。BCD編碼方法很多,但常用的是8421編碼:它採用4 位二進制數表示1位十進制數,即每一位十進制數用四位二進製表示。這4位二進制數各位權由高到低分別是23、22、21、20,即8、4、2、1。這種編碼最自然,最簡單,且書寫方便、直觀、易於識別。

比如:十進制數1998的8421碼為:
0001 1001 1001 1000

十進制: 1 9 9 8
8421碼: 0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 0
位權: 8 4 2 1 8 4 2 1 8 4 2 1 8 4 2 1

思考:
1、一個十進數的BCD碼如何轉換成十進制數?
2、一個十進制數的BCD碼是該數的 二進制數嗎?
3、一個十進制數的BCD碼與二進制數之間如何相互轉換?

2、ASCII碼

ASCII碼是計算機系統中使用得最廣泛的一種編碼(讀作阿斯克伊碼)。ASCII碼雖然是美國國家標准,但它已被國際標准化組織(ISO)認定為國際標准。ASCII碼已為世界公認,並在世界范圍內通用。ASCII碼有7位版本和8位版本兩種。國際上通用的是7位版本。7位版本的ASCII碼有128個元素,其中通用控制字元34個,阿拉伯數字10個,大、小寫英文字母52個,各種標點符號和運算符號32個。

比如:「A」的ASCII碼值為:1000001,即十進制的65;「a」的ASCII碼值為:1100001,即十進制的97;「0」的ASCII碼值為:0110000,即十進制的48。

3、漢字編碼

我國用戶在使用計算機進行信息處理時,都要用到漢字:漢字的輸入,輸出以及漢字處理。這就需要對漢字進行編碼。通常漢字有兩種編碼:國標碼和機內碼。
a、國標碼
計算機處理漢字所用的編碼標準是我國於1980年頒布的國家標准(GB2312-80),是國家規定的用於漢字編碼的依據,簡稱國標碼。
國標碼規定:用兩個位元組表示一個漢字字元。在國標碼中共收錄漢字和圖形符號7445個。
國標碼本身也是一種漢字輸入碼。通常稱為區位輸入法。

b、機內碼
機內碼是指在計算機中表示一個漢字的編碼。
機內碼是一種機器內部的編碼,其主要作用是作為漢字信息交換碼使用:將不同系統使用的不同編碼統一轉換成國標碼 ,使不同的系統之間的漢字信息進行交換。
正是由於機內碼的存在,輸入漢字時就允許用戶根據自己的習慣使用不同的漢字輸入法,比如:五筆字型、自然碼、智能拼音等,進入系統後再統一轉換成機內碼存儲。

(4)漢字編碼
西文是拼音文字,基本符號比較少,編碼比較容易,因此,在一個計算機系統中,輸入、內部處理、存儲和輸出都可以使用同一代碼。漢字種類繁多,編碼比拼音文字困難,因此在不同的場合要使用不同的編碼。通常有4種類型的編碼,即輸入碼、國標碼、內碼、字形碼。

① 輸入碼

輸入碼所解決的問題是如何使用西文標准鍵盤把漢字輸入到計算機內。有各種不同的輸入碼,主要可以分為三類:數字編碼、拼音編碼和字編型碼。

● 數字編碼。就是用數字串代表一個漢字,常用的是國標區位碼。它將國家標准局公布的6763個兩級漢字分成94個區,每個區分94位。實際上是把漢字表示成二維數組,區碼、位碼各用兩位十進制數表示,輸入一個漢字需要按4次鍵。數字編碼是惟一的,但很難記住。比如「中」字,它的區位碼以十進製表示為5448(54是區碼,48是位碼),以十六進製表示為3630(36是區碼,30是位碼)。以十六進製表示的區位碼不是用來輸入漢字的。

● 拼音編碼。是以漢字讀音為基礎的輸入方法。由於漢字同音字太多,輸入後一般要進行選擇,影響了輸入速度。

● 字型編碼。是以漢字的形狀確定的編碼,即按漢字的筆畫部件用字母或數字進行編碼。如五筆字型、表形碼,便屬此類編碼,其難點在於如何拆分一個漢字。

② 國標碼

又稱為漢字交換碼,在計算機之間交換信息用。用兩個位元組來表示,每個位元組的最高位均為0,因此可以表示的漢字數為214=16384個。將漢字區位碼的高位位元組、低位位元組各加十進制數32(即十六進制數的20),便得到國標碼。例如「中」字的國標碼為8680(十進制)或7468(十六進制)。這就是國家標准局規定的GB2312—80信息交換用漢字編碼集。

③ 內碼

漢字內碼是在設備和信息處理系統內部存儲、處理、傳輸漢字用的代碼。無論使用何種輸入碼,進入計算機後就立即被轉換為機內碼。規則是將國標碼的高位位元組、低位位元組各自加上128

為了統一表示世界各國的文字,1993年國際標准化組織公布了「通用多八位編碼字元集」的國際標准ISO/IEC 10646,簡稱UCS(Universal Code Set),它為包括漢字在內的各種正在使用的文字規定了統一的編碼方法。該標准使用4個位元組來表示一個字元。其中,一個位元組用來編碼組,因為最高位不用,故總共表示128個組。一個位元組編碼平面,總共有256個平面,這樣,每一組都包含256個平面。在一個平面內,用一個位元組來編碼行,因而總共有256行。再用一個位元組來編碼字位,故總共有256個字位。一個字元就被安排在這個編碼空間的一個字位上。例如ASCII字元「A」,它的ASCII為41H,而在UCS中的編碼則為00000041H,即位於00組、00面、00行的第41H字位上。又如漢字「大」,它在GB2312中的編碼為3473H,而在UCS中的編碼則為00005927H,即在00組、00面、59H行的第27H字位上。4個位元組的編碼足以包容世界上所有的字元,同時也符合現代處理系統的體系結構。

④ 字形碼

表示漢字字形的字模數據,因此也稱為字模碼,是漢字的輸出形式。通常用點陣、矢量函數等表示。用點陣表示時,字形碼指的就是這個漢字字形點陣的代碼。根據輸出漢字的要求不同,點陣的多少也不同。簡易型漢字為16�0�716點陣、提高型漢字為24�0�724點陣、48�0�748點陣等。現在我們以24�0�724點陣為例來說明一個漢字字形碼所要佔用的內存空間。因為每行24個點就是24個二進制位,存儲一行代碼需要3個位元組。那麼,24行共佔用3�0�724=72個位元組。計算公式:每行點數/8�0�7行數。依此,對於48�0�748的點陣,一個漢字字形需要佔用的存儲空間為48/8�0�748=6�0�748=288個位元組。

(十進制)或80(十六進制)。例如,「中」字的內碼以十六進製表示時應為F4E8。這樣做的目的是使漢字內碼區別於西文的ASCII,因為每個西文字母的ASCII的高位均為0,而漢字內碼的每個位元組的高位均為1。

⑨ 在計算機系統中輸入的一切數據都是以( )編碼方式儲存的

計算機系統使用的存儲方式都是以二進制編碼方式實現的

⑩ 漢字在計算機系統中存儲所用的編碼是什麼

機內碼。

漢字機內碼,又稱「漢字ASCII碼」,簡稱「內碼」,指計算機內部存儲,處理加工和傳輸漢字時所用的由0和1符號組成的代碼。輸入碼被接受後就由漢字操作系統的「輸入碼轉換模塊」轉換為機內碼,與所採用的鍵盤輸入法無關。

機內碼是漢字最基本的編碼,不管是什麼漢字系統和漢字輸入方法,輸入的漢字外碼到機器內部都要轉換成機內碼,才能被存儲和進行各種處理。

(10)計算機系統存儲編碼擴展閱讀:

因為漢字處理系統要保證中西文的兼容,當系統中同時存在ASCII碼和漢字國標碼時,將會產生二義性。

例如:有兩個位元組的內容為30H和21H,它既可表示漢字「啊」的國標碼,又可表示西文「0」和「!」的ASCII碼。為此,漢字機內碼應對國標碼加以適當處理和變換。

國標碼的機內碼為二位元組長的代碼,它是在相應國標碼的每個位元組最高位上加「1」,即

漢字機內碼=漢字國標碼+8080H

例如,上述「啊」字的國標碼是3021H,其漢字機內碼則是B0A1H。