BCD資料表示

2021-06-28 21:09:02 字數 1328 閱讀 4749



2.13  bcd資料表示

雖然整數和浮點格式已經可以滿足一般程式的資料表示需求,但是在一些特殊的情況下,其他的數字表示方式更加方便一些。在本節中,我們將對二進位制編碼的十進位制(bcd)格式進行討論,因為80x86 cpu為這種資料表示方式提供了少量的硬體支援。

bcd數值是由一些半位元組組成的序列,每個半位元組表示0~9中的某個數值。當然,也可以使用半位元組來表示0~15中的數值;但是在每個半位元組所能表示的16個不同數值中,bcd格式只使用了其中的10個。

bcd數值中的每個半位元組表示乙個十進位制數字。因此,我們用乙個位元組(也就是兩個數字)可以表示包含兩個十進位制數字的數值或者0~99內的數值(見圖2-25)。用乙個字,我們可以表示具有四個十進位制數字的數值或者說0~9999內的數值。同樣,使用乙個雙字,我們可以表示具有八個十進位制數字的數值(因為在乙個雙字數值當中存在八個半位元組)。

圖2-25  儲存器中bcd資料表示

正如您所看到的,bcd儲存並沒有有效利用儲存器。例如,乙個8位的bcd變數可以表示0~99內的數值,然而當儲存二進位制數值的時候,同樣的8位可以表示0~255內的數值。同樣,16位的二進位制數值可以表示0~65535內的數值,而乙個16位的bcd數值只能表示這些數值中的1/6(0~9999)。儲存效率低還不是唯一的問題。bcd的計算往往比二進位制的計算更慢。

在此,您可能想知道為什麼會有人採用bcd格式。bcd格式確實存在兩個優點:bcd數值的內部數字表示和它們的字串表示之間進行轉換是非常容易的;而且,在用硬體(例如,使用微型旋輪或者刻度盤)完成多位十進位制數值的編碼時,使用bcd碼比使用二進位制要容易得多。正是由於這兩個原因,您很可能會在嵌入式系統(例如,微波爐、鬧鐘和核反應堆)中看到人們使用bcd碼,但是卻很少看到它們應用於一般的計算機軟體中。

幾十年以前,人們錯誤地認為涉及bcd碼(或者只是"十進位制")的算術運算比二進位制運算更加精確一些。因此,他們通常都採用基於十進位制的算術運算來執行那些重要的計算,比如美元和美分(或者其他的金融單位)的計算。雖然某些採用bcd碼的計算能夠產生更加精確的結果,但是這種說法在一般情況下是不正確的。事實上,對於大多數計算(甚至那些涉及定點十進位制的算術運算)來說,二進位制表示更加精確一些。因此,現在大多數的電腦程式都採用二進位制格式來表示所有的數值。例如,intel的80x86浮點單元(fpu)對兩條用於儲存和取出bcd數值的指令提供了支援。然而在內部,fpu將這些bcd數值轉換為二進位制表示,並採用二進位制來執行所有的計算。它只將bcd碼用作外部資料格式(也就是說,在fpu的外面)。這樣一般就能產生更加精確的結果,與專門擁有乙個能支援十進位制計算的協處理器相比,它占用的矽片面積更小。

Struts Hibernate資料表示

在 struts hibernate 這種結構中,是不應該把hibernate產生的po直接傳遞給jsp的,不管他是iterator,還是list,這是乙個設計錯誤。我來談談在j2ee架構中各層的資料表示方法 web層的資料表示是formbean,資料 於html form post 業務層的資料表...

資料表示 機器數

各種數值在計算機中的表示形式稱為機器數。特點是採用二進位制計數制,數的符號使用0和 1表示,小數點則隱含表示不佔位。無符號數 表示的是正數,機器中沒有符號未。帶符號數 機器數的最高位表示正負的符號位,其餘為表示數值。純整數 約定小數點的位置在機器數的最低數值位之後。純小數 約定小數的位置在機器數的最...

Python 的資料表示

一 常量 變數和物件 1 常量 是指在程式的執行過程中不變的量。如 1,2,3,4,true false 也有一些包含在模組中的用符號表示的常量,常用的如math模組中的pi和e,如 from math import sqrt,sin pi 顯示3.141592653589793 e 顯示2.718...