當前位置:首頁 » 服務存儲 » 定點數存儲格式
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

定點數存儲格式

發布時間: 2022-05-28 20:29:11

『壹』 C語言編程,定點數的存儲方式

1.
定點數是計算機中採用的一種數的表示方法。參與運算的數的小數點位置固定不變。
2.
定點數又分為定點整數和定點小數。
定點整數
小數點位固定在最後一位之後稱為定點整數。若機器字長為n+1位,數值表示為:
X=X0X1X2...Xn,其中Xi={0,1},0≤i≤n
即(-1)^X0
*
(X1*2^(n-1)
+
X2*2^(n-2)
+
...
+
Xn-1*2
+
Xn)
數值范圍是
-(2^n-1)≤X≤2^n-1
例如:1111表示-7。
定點小數
小數點固定在最高位之後稱為定點小數。若機器字長為n+1位,數值表示為:
X=X0.X1X2...Xn,其中Xi={0,1},0≤i≤n
(這里X0不表示數字,只表示符號,若X0=0,則代表X=0.X1X2...Xn,X0=1,則代表-0.X1X2...Xn)。
即X=X0.X1X2...Xn代表的小數為
(-1)^X0
*
((X1*2^(-1))
+
X2*2^(-2)
+
...
+
Xn-1*2^(-n+1)
+
Xn*2^(-n))
數值范圍是
-(1-2^(-n))≤X≤1-2^(-n)
例如:1111表示-0.875

『貳』 定點數還有不同的格式嗎 比如這句話什麼意思: 同一個數使用相同格式的定點數表示時是唯一的

定點數顧名思義就是能表示小數點固定的數,包括小數點在最低位後面的整型數在內,比如指定二進制最後3位是小數
浮點數記錄一個數時,要記錄這個數的小數部分信息(即指數取值),還要記錄這個數的有效值,小數點在這個有效值中的位置是根據指數信息確定的,當然浮點數也能存放整數了

『叄』 計算機內部數字儲存形式有定點數和什麼

電腦內部儲存形式有定點數和浮點數。
浮點數是屬於有理數中某特定子集的數的數字表示,在計算機中用以近似表示任意某個實數。具體的說,這個實數由一個整數或定點數(即尾數)乘以某個基數(計算機中通常是2)的整數次冪得到,這種表示方法類似於基數為10的科學計數法。
是指浮點數參與的運算,這種運算通常伴隨著因為無法精確表示而進行的近似或舍入。
一個浮點數a由兩個數m和e來表示:a = m × b^e。在任意一個這樣的系統中,我們選擇一個基數b(記數系統的基)和精度p(即使用多少位來存儲)。m(即尾數)是形如±d.ddd...ddd的p位數(每一位是一個介於0到b-1之間的整數,包括0和b-1)。如果m的第一位是非0整數,m稱作規格化的。有一些描述使用一個單獨的符號位(s 代表+或者-)來表示正負,這樣m必須是正的。e是指數。
希望我能幫助你解疑釋惑。

『肆』 一個定點數有哪兩部分組成,根據小數位置的不同,定點數有哪兩種表示方法

分別是定點數與浮點數。

所謂定點數,就是指小數點固定的數。例如我們生活中對金錢的描述就是典型的定點數格式。
所謂浮點數,就是指小數點浮動、不固定的數。科學計數法就是最典型的浮點數應用。
兩者的區別主要在於:表示的精度與范圍不同,對於相同的存儲空間而言,浮點數的精度更高、有效范圍更小;在計算機中運算的效率不同,浮點數的運算實現復雜、效率低下,因此一般需要在CPU中添加專門的浮點運算單元。

『伍』 通過比較定點數和浮點數的格式,試說明這兩種數的區別.

定點數是固定,即使指數空間多餘,基數不夠,也不能挪借

浮點就是可以挪借

浮點數是屬於有理數中某特定子集的數的數字表示,在計算機中用以近似表示任意某個實數。具體的說,這個實數由一個整數或定點數(即尾數)乘以某個基數(計算機中通常是2)的整數次冪得到,這種表示方法類似於基數為10的科學記數法。

浮點計算是指浮點數參與的運算,這種運算通常伴隨著因為無法精確表示而進行的近似或舍入。

一個浮點數a由兩個數m和e來表示:a = m × be。在任意一個這樣的系統中,我們選擇一個基數b(記數系統的基)和精度p(即使用多少位來存儲)。m(即尾數)是形如±d.ddd...ddd的p位數(每一位是一個介於0到b-1之間的整數,包括0和b-1)。如果m的第一位是非0整數,m稱作規格化的。有一些描述使用一個單獨的符號位(s 代表+或者-)來表示正負,這樣m必須是正的。e是指數。

這種設計可以在某個固定長度的存儲空間內表示定點數無法表示的更大范圍的數。

例如,一個指數范圍為±4的4位十進制浮點數可以用來表示43210,4.321或0.0004321,但是沒有足夠的精度來表示432.123和43212.3(必須近似為432.1和43210)。當然,實際使用的位數通常遠大於4。

此外,浮點數表示法通常還包括一些特別的數值:+∞和�6�1∞(正負無窮大)以及NaN('Not a Number')。無窮大用於數太大而無法表示的時候,NaN則指示非法操作或者無法定義的結果。

大部份計算機採用二進制(b=2)的表示方法。位(bit)是衡量浮點數所需存儲空間的單位,通常為32位或64位,分別被叫作單精度和雙精度。有一些計算機提供更大的浮點數,例如英特爾公司的浮點運算單元Intel8087協處理器(以及其被集成進x86處理器中的後代產品)提供80位長的浮點數,用於存儲浮點運算的中間結果。還有一些系統提供128位的浮點數

『陸』 關於定點與浮點

一.double類型的存儲表示

Java的浮點類型表示完全按照IEEE754標准(Standards of IEEE 754 floating point numbers),有興趣可以上IEEE標准網站(www.ieee.org)查閱.該標準的內容基本上描述了浮點類型的存儲格式(Storage Layout),下面我從中總結幾段,來概括該標准,詳細信息請查閱標准原文.

1.什麼是浮點數.

計算機上表達實數有兩中方法:定點表示(fixed-point)和浮點表示(floating-point).定點表示法就是在現有的數字中間的某個位置固定小數點,整數部分和小數部分的表示和一個普通整數的表示法沒什麼兩樣.例如,我們的數字長度為4,小數點位於中間,那麼你可以表示10.28,也可以表示00.01,與這種方法性質類似的定點表示還有使用分數的形式.定點數的固定窗口形式使得他既不能夠表示非常大的數又不能表示非常小的數.並且當除法發生時,大量 的精度丟失.

浮點數採用科學計數法的形式來表示實數.例如123.456可以表示成1.23456×102.相對於定點數的固定窗口(fixed Window)的限制,它採用的是浮動窗口(sliding window),因此可以表示較大精度范圍的一個實數.

2.存儲布局(Storage Layout)

所謂的存儲布局就是一個浮點數在內存中如何表示.我們知道浮點數有float和double,前者是4個位元組也就是32位,後者是8個位元組也就是64位.布局分別為:

符號 指數 小數部分 偏移附加(bias)

單精度 1[31] 8[30-23] 23[22-00] 127

雙精度 1[63] 11[62-52] 52[51-00] 1023

中括弧內為位的編號范圍,外面為該部分所佔有的位的數量.偏移附加不屬於位表示的內容,是一個常量,稍後解釋.

符號只有一位:0-表示正數 1-表示負數

指數部分:用指數部分的值(8位/11位,unsigned)的值 減去 偏移附加 得到該數實際的指數 例如值為200,實際指數為73=200-127.對於雙精度的double來說常量bias=1023

尾數:尾數是什麼?對於一個科學計數法來講,形式象這樣的 L.M×BE,那麼這個L.M就是所謂的尾數(mantisa).它由一個起始位和一個小數部分組成.舉個例子,5可以用科學計數法表示成不同形式:

5*100

0.5*101

50*10-1

那麼我們引進一個概念,規范化形式(normalized form)和非規范化形式(denormalized form).我們定義規范化形式為小數點位於第一個不為0的數字後面的表達形式為規范化形式,因此上面的第一種形式為規范化形式,其他的為非規范化形式,Java中的浮點表示完全按照這個標准,只有兩種形式規范化形式:1.f 和 非規范化形式 0.f .

那麼,對於我們的位布局來說,選用底數為2的話,只有一個數字是非零的,那就是1.所以我們的隱含起始數字可以不用佔用一個位,因為除了0就只能是1,具體的隱含規則,稍後展示.

3.表示的意義.

對應於上面的表格,每一個區域對應的值的范圍所表示的浮點數的意義:

符號位s 指數位e 小數位f 所表示的意義v

0 00..00 00..00 +0

0 00..00 00..01

:

11..11 正的非規范實數,計算方法v=0.f × 2(-b+1)

0 00..01

:

11..10 XX..XX 正的規范化實數,計算方法v=1.f × 2(e-b)

0 11..11 00..00 正的無窮大

0 11..11 00..01

:

01..11 無意義的非數字SNAN

0 11..11 10..00

:

11..11 無意義的非數字QNAN

其中b=127(float)/b=1023(double),SNAN表示無效運算結果,QNAN表示不確定的運算結果,都是無意義的.

如果把符號位s改成1,那麼就全部都是負數的含義,其他意義和這相同.

另外我們看到,對於無意義的數字是指數部分為全1時,也就是說這里有很多種組合都是無意義的非數字,而我們的Java中,判斷一個數字是否是NAN的做法相當簡單

static public boolean isNaN(double v) {

return (v != v);

}

從這里可以看出來,虛擬機對於double類型的數據比較時,肯定是先做了指數值的判定,發現不是全1時才作內存的逐位比較.當然這是我得推測,真像不知道是否如此.

再另外,我們''現在十分清楚,double類型所能表示的最小值就是它的值之間的距離,也就是我們所說的精度,數字按這種精度向整數"1階梯式的累加時,正好不能和1完全匹配,換句話說,1不是最小值(精度/距離)的整數倍.因此如果你設置變數 double d = 0.1;而結果不會是0.1,因為無法表示0.1;

二.怎麼查看double類型的存儲結構?

我們很清楚Java的Double類型提供一個函數叫做doubleToLongBits函數,這個函數的其實很簡單,我們知道,long類型和double類型都是64位的,他們的內存大小一樣,這個函數的做法就是把double對應的內存結構復制到同樣大小的long類型變數的內存結構中.返回這個long值.因為Java不支持對double類型做位運算,因此:

1.該函數不可能用Java語言完成,所以他是JNI實現

2.我們利用對long類型的位運算可以把該內存結構列印出來查看.

/**

* 測試

*/

public static void main(String[] args){

myTest t = new myTest();

double d = 0.1d;

long l = Double.doubleToLongBits(d);

System.out.println(t.getLongBits(l));

}

/**

* 得到常整數的bit位表示字元串

* @param a

* @return

*/

public String getLongBits(long a){

//8個位元組的位元組數組,讀出來

byte[] b = new byte[8];

for(int i=7;i>=0;i--){

b[i] = (byte)(a&0x000000FF);

a = a>>8;

}

return this.byte2hex(b); //調用下面一個函數

}

/**

* 位元組數組轉換成字元串

* @param b

* @return

*/

public static String byte2hex(byte[] b){

StringBuffer sb=new StringBuffer();

String stmp="";

for(int n=0;nstmp=(Integer.toHexString(b[n]&0XFF));

if(stmp.length()==1){

//不足兩位的末尾補零

sb.append("0"+stmp);

} else{

sb.append(stmp);

}

if(n//":"作為分割符

sb.append(":");

}

}

return sb.toString().toUpperCase();

}

0.1列印出來的內存結果是:

3F:B9:99:99:99:99:99:9A

我們恢復一下和第一節的表示意義對照表對照一下:

0 01111111011 1001.....1010

有興趣的話,可以那科學計算器按照第一節的規則計算一下它的值,哦,正好就是我們通過System.out.println(d)列印的結果.

『柒』 計算機是怎麼區別定點小數和定點整數的

計算機在定點數的存儲中,小數點是隱含的,即不表示出來。
區別定點小數和定點整數的存儲時,計算機會將定點小數先規范化(如利用IEEE754規范方式)
再存儲,定點整數則是直接存儲的,這樣就能夠區分了。

『捌』 默認情況下所有CPU定點運算器中採用的定點數的存儲表示方法是

默認情況下所有CPU定點運算器中採用的定點數的存儲表示方法是?
計算機 CPU

『玖』 如何定義定點數類型

就用long 唄,加減法都不變, 乘除法略微處理一下。比方說 a , b 兩個定點數相乘就這樣:
a * b >> 7
相除就這樣
(a << 7) / b
當然如果你確實用到32位的話這樣很容易溢出的, 可以用long long來算, 算完了截斷掉

要點就是你要時刻記住,a里實際存放的數就是 a /128.0

『拾』 計算機組成原理里的:定點整數 定點小數 浮點數 編程里的基本數據類型int float在內存中的存儲

整型就是一般的存儲,有符號數,最高位為符號位,0表示正數,1表示負數。 無符號數,就沒有什麼格式了。

浮點數,就比較復雜了,它是遵守的IEEE754浮點編碼標准,拿FLOAT類型來說,這種類型是32位的,其中1位表示符號位,8位表示指數位,23位表示有效數字位。 簡單的用公式表示:(-1)^S * M ^e。 S是符號位,M是有效數字,E是指數,你最好自己去搜索一下IEEE754浮點數編碼的內容。

當然這種知識了解一下就好了。。參考資料推薦 :深入理解計算機系統 我記得是第二章中,有詳細的介紹。