日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《计算机科学概论》—第3章3.2节数字数据表示法

發布時間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《计算机科学概论》—第3章3.2节数字数据表示法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本節書摘來自華章出版社《計算機科學概論》一書中的第3章,第3.2節數字數據表示法,作者[美]內爾·黛爾(Nell Dale)約翰·路易斯(John Lewis),更多章節內容可以訪問云棲社區“華章計算機”公眾號查看。

3.2 數字數據表示法
數值是計算機系統最常用的數據類型。與其他數據類型不同的是,不必把數字數據映射到二進制代碼。因為二進制也是一種記數系統,所以在數字數據和計算機存儲的表示它們的二進制數值之間有種自然對應的關系。通常對正整數來說都是這樣的。在第2章關于二進制系統和其他等價記數系統的討論中,我們介紹了整數轉換的問題。但是,還有其他關于數字數據表示法的問題需要考慮,整數不過是數字數據的一部分。這一節將討論負數和非整數數值的表示法。
3.2.1 負數表示法
負數只是前面帶有負號的數嗎?也許吧。這當然是看待負數的有效方式之一。讓我們來探討關于負數的問題,討論在計算機上表示負數的適當方式。
符號數值表示法
從初次在中學學習負數開始,你就使用過數的符號數值表示法。在傳統的十進制系統中,數值之前帶有符號(+或-),只不過正號通常被省略。符號表示了數所屬的分類,數字表示了它的量值。標準的實數直線圖如下,其中負號表示該數位于0的左側,正數位于0的右側。




符號數值表示法(signed-magnitude representation):符號表示數所屬的分類(正數或負數)、值表示數的量值的數字表示法。

對帶符號的整數執行加法和減法操作可以被描述為向一個方向或另一個方向移動一定的數字單位。要求兩個數的和,即找到第一個數的刻度,然后向第二個數的符號所示的方向移動指定的數字單位。執行減法的方式一樣,即按照符號所示的方向沿著實數直線圖移動指定的單位。在中學,即使不使用實數直線圖,你也能夠很快掌握加法和減法運算。
符號數值表示法有一個問題,即表示0的方法有兩種:一種是+ 0,一種是- 0。我們不會對- 0感到迷惑,忽略它即可。但是,在計算機中,0的兩種表示法卻會引起不必要的麻煩,所以還有其他表示負數的方法。讓我們來分析另一種負數表示法。
定長量數
如果只允許用定量的數值,那么可以用一半數表示正數,另一半數表示負數,符號由數的量值決定。例如,假定能夠表示的最大十進制數是99,那么可以用1到49表示正數1到49,用50到99表示負數- 50到- 1。這種表示法的實數直線圖如下所示,它標示了上面的數對應的負數。




在這種模式下執行加法,只需要對兩個數求和,然后舍棄進位即可。求兩個正數的和應該沒有什么問題,讓我們來嘗試求一個正數加一個負數、一個負數加一個正數以及兩個負數相加。下表分別列出了用符號數值表示法和用這種模式執行的加法運算。(注意,進位被舍棄了。)
符號數值表示法 新模式
?????5
  • ?- 6
    ???- 1 ????5
  • ?94
    ???99

???- 4

  • ???6
    ?????2 ???96
  • ??6
    ????2

???- 2

  • ?- 4
    ???- 6 ???98
  • ?96
    ???94




用這種模式表示的負數的減法運算又如何呢?關鍵是加法和減法之間的關系,即A - B=A + (- B)。從一個數中減去另一個數,等價于給第一個數加上第二個數的負數。
符號數值表示法 新模式 加負數
??- 5
  • ??3
    ??- 8 ???95
  • ??3

    ????95
  • ??97
    ????92




在這個例子中,我們假定只有100個數值,這個數量非常小,使我們能夠用實數直線圖來計算一個數的負數(Negative)表示法。不過,要計算負數表示法,可以采用下列公式。
Negative (I) = 10k - I,其中k是數字個數
在兩位數字表示法中,求- 3的表示法的公式如下:
  • (3) = 102 - 3 = 97
    在三位數字表示法中,求- 3的表示法的公式如下:
  • (3) = 103- 3 = 997
    這種負數表示法稱為十進制補碼。雖然人類以符號和量值表示數字,但在電子計算中,補碼在某些方面更方便。由于現代計算機存儲任何數據采用的都是二進制,所以我們采用與十進制補碼等價的二進制補碼。

十進制補碼(ten′s complement):一種負數表示法,負數I用10的k次冪減I表示。
二進制補碼
假定數字只能用八位表示,七位表示數值,一位表示符號。為了便于查看長的二進制數,我們把實數直線圖繪制成垂直的。




如果將十進制替換為二進制,那么補碼公式還會有效嗎?也就是說,我們能不能用公式“Negative(I) = 2k - I”來計算用負二進制表示的數值呢?讓我們嘗試看看:
  • (2) = 27 - 2 = 128 - 2 = - 126
    十進制數126用八進制表示是176,用二進制表示是11111110,但是左邊多了一個位數“1”。是出錯了嗎?并不是,因為這是一個負數,最左邊的位數表示了這個數字是負數還是正數。如果最左邊一位是“0”,那么說明這個數字是正數;如果是“1”說明這個數字是負數。因此“- 2”表示為“11111110”。

有一個更簡單的方法來計算二進制補碼:將每一位取反再加一。也就是,取數字的正值,將所有“1”變成“0”,將所有的“0”變成“1”,再加1。




使用十進制補碼計算加法和減法的方式和二進制補碼是一樣的:



使用這種表示法,負數的最左邊一位總是1。因此,在二進制補碼中,你可以立刻識別出一個數是正數還是負數。
數字溢出
當我們分配給結果的位數存不下計算出的值時,將發生溢出。例如,如果使用八位來存儲每個值,那么127加3的結果將溢出:



溢出(overf?low):給結果預留的位數存不下計算出的值的狀況。
在我們的模式中,10000010表示- 126,而不是 + 130。但是,如果表示的不是負數,這個結果將是正確的。
溢出是把無限的世界映射到有限的機器上會發生的典型問題。無論給一個數字分配多少位,總有潛在的表示這些位不能滿足的數的需要。對于如何解決溢出問題,不同的計算機硬件和不同的程序設計語言有自己獨特的方法。
3.2.2 實數表示法
在計算中,我們把非整數的值稱為實值。根據實數在計算機中的用途,把它定義為可能具有小數部分的值。也就是說,實數具有整數部分和小數部分,每個部分都可能是0。例如,104.32、0.999?999、357.0和3.141?59都是十進制實數。
我們在第2章中介紹過,用數字的位置表示數值,位值是由基數決定的。在十進制中,小數點左側的位值有1、10、100,依此類推。它們都是基數的冪,從小數點開始向左,每一位升高一次冪。小數點右側的位值也是這樣得到的,只不過冪是負數。所以,小數點右側的位置是十分位(10- 1或十分之一)、百分位(10- 2或百分之一),依此類推。
二進制采用的是同樣的規則,只是基數為2。由于處理的不是十進制數,所以使用radix point來命名小數點,任何記數系統都可以使用這個術語。在二進制中,小數點右側的位置是二分位(2- 1或二分之一)、四分位(2- 2或四分之一),依此類推。
那么如何在計算機中表示一個實值呢?我們把實數存儲為一個整數加指示小數點位置的信息。也就是說,任何實值都可以由三個屬性描述,即符號(正號或負號)、尾數和指數,尾數由該數值中的數字構成,假定小數點在其右邊,而指數確定了小數點相對于尾數的位移。十進制的實值可以用下列公式定義:
符號×尾數×10exp
這種表示法稱為浮點表示法,因為數字的個數是固定的,但是小數點卻是浮動的。在用浮點形式表示的數值中,正指數將把小數點向右移,負指數將把小數點向左移。
**小數點(radix point):在記數系統中,把一個實數分割成整數部分和小數部分的點。
浮點表示法(f?loating point):標明了符號、尾數和指數的實數表示法。**
讓我們來看看如何把實數常用的十進制表示法轉換成浮點表示法。例如,考慮實數148.69,符號是正號,小數點右邊有兩位數字,因此,指數是- 2,浮點表示法即14?869×10 - 2。表3-1給出了其他例子。為了便于討論,假設只能表示五位數字。



表3-1 十進制表示法和浮點表示法表示的(五位數字)值
實 值 浮點值 實 值 浮點值
12001.00 12001100 - 123.10 - 12?31010- 2
  • 120.01 - 1200110- 2 155?555?000.00 15?555103
    0.12000 12000*10- 5

如何把浮點數轉換回十進制表示法呢?基數上面的指數說明了小數點要移動多少位。如果指數是負數,小數點要向左移;如果指數是正數,小數點要向右移。對表3-1中的浮點數應用這個規則。
注意表3-1中的最后一個例子,它丟失了信息。因為我們只保存五位數字來表示有效數字(尾數),所以這個值的整數部分在浮點表示法中沒有被精確地表示出來。
同樣,下面的公式定義了一個二進制浮點值:
符號×尾數×2exp
注意,只有基數改變了。當然,尾數只能包含二進制數字。要在計算機上存儲二進制的浮點數,可以保存定義它的三個值。例如,根據一條通用準則,如果用64位存儲一個浮點值,那么其中1位存儲符號,11位存儲指數,52位存儲尾數。當一個值用于計算或顯示時,都會采用這種格式。
如果一個數不完整,那么如何才能得到尾數的正確值呢?在第2章中,我們討論過如何把自然數從一種記數系統轉換到另一種記數系統。這里,我們用十進制的例子說明了在計算機中如何表示實數。我們知道,計算機中的所有數值都是用二進制表示的。那么如何把十進制數的小數部分轉換成二進制的呢?
把一個整數從十進制轉換成其他數制,需要用新基數除這個數,余數是結果左邊的下一位數字,商是新的被除數,整個過程直到商為0終止。轉換小數部分的操作是類似的,只不過不是用新基數除這個數,而是用新基數乘它。乘法的進位將成為答案右邊的下一位數字,乘法結果中的小數部分將成為新的被乘數,整個過程直到乘法結果中的小數部分為0截止。讓我們把0.75轉換成二進制的。
0.75 * 2 = 1.50
0.50 * 2 = 1.00
因此,十進制中的0.75是二進制中的0.11。讓我們再做一個轉換。

  ?0.435 * 2 = 0.870?0.870 * 2 = 1.740?0.740 * 2 = 1.480?0.480 * 2 = 0.960?0.960 * 2 = 1.920?0.920 * 2 = 1.840?…

因此,十進制中的0.435是二進制中的011011…。小數部分會變成0嗎?繼續乘下去,看看結果如何。
下面讓我們看一個完整的轉換過程:把十進制的20.25轉換成二進制的。首先,轉
換20。






20在二進制中等價于10100。現在我們來轉換小數部分:
0.25 * 2 = 0.50
0.50 * 2 = 1.00
因此,十進制的20.25在二進制中是10100.01。
科學記數法可能是你已經熟悉的術語,所以我們在這里只簡要介紹一下。科學記數法是浮點表示法的一種形式,其中,小數點總在最左邊數字的右側。也就是說,整數部分只有一位。在許多程序設計語言中,如果在輸出一個大的實數值時沒有指定輸出格式,那么這個值將以科學記數法輸出。因為早期的機器不能輸出指數,所以用字母“E”代替。例如,在科學記數法中,12001.32708將被寫為1.200132708E + 4。

科學記數法(scientif?ic notation):另一種浮點表示法。

總結

以上是生活随笔為你收集整理的《计算机科学概论》—第3章3.2节数字数据表示法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。