C語言程序設計(第2版)課件 藺德軍float double的存放格式_第1頁
C語言程序設計(第2版)課件 藺德軍float double的存放格式_第2頁
C語言程序設計(第2版)課件 藺德軍float double的存放格式_第3頁
C語言程序設計(第2版)課件 藺德軍float double的存放格式_第4頁
全文預覽已結(jié)束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

符號位階碼尾數(shù)長度float182332double1115264臨時數(shù)1156480double存儲舉例按照IEEE浮點數(shù)表示法,下面將把double型浮點數(shù)38414.4轉(zhuǎn)換為十六進制代碼。把整數(shù)部和小數(shù)部分開處理:整數(shù)部直接化十六進制:960E。小數(shù)的處理:0.4D=0.011001100110011001100110011001100110B實際上這永遠算不完!這就是著名的浮點數(shù)精度問題。所以直到加上前面的整數(shù)部分算夠53位就行了(隱藏位技術:最高位的1不寫入內(nèi)存)。如果你夠耐心,手工算到53位那么因該是:38414.4D=1001011000001110.011001100110011001100110011001100110B科學記數(shù)法為:1.001011000001110.011001100110011001100110011001100110乘以2的15次方。指數(shù)為15階碼范圍又增加了1階碼范圍又增加了1因為指數(shù)可以為負,一共11位,可以表示范圍是-1024~1023。為了便于計算,規(guī)定都補碼加上1023負數(shù)時相當于用按位取反,在這里,負數(shù)時相當于用按位取反15+1023=1038。二進制表示為:10000001110符號位:正——0合在一起(尾數(shù)二進制最高位的1不要):01000000111000101100000111001100110011001100110011001100110011001100因為表達范圍后是11,因此調(diào)整進位,變成0100000011100010110000011100110011001100110011001100110011001101按字節(jié)倒序存儲的十六進制數(shù)就是:40E2C1CCCCCCCCCD#include<stdio.h>voidmain(){ doublea=38414.4; int*p=(int*)&a; printf("%x%x\n",*(p+1),*p);}float存儲舉例float示例一11.9的內(nèi)存存儲格式(1)將11.9化為二進制后大約是1011.1110011001100110011001100..."。(2)將小數(shù)點左移三位到第一個有效位右側(cè):1.01111100110011001100110*2(3)保證有效位數(shù)24位,右側(cè)多余的截取(誤差在這里產(chǎn)生了)。(3)這已經(jīng)有了二十四位有效數(shù)字,將最左邊一位“1”去掉,得到01111100110011001100110共23bit。將它放入float存儲結(jié)構(gòu)的第22到第0位。(4)因為11.9是正數(shù),因此在第31位實數(shù)符號位放入“0”。(5)因為我們是把小數(shù)點左移3位,因此將3加127補碼加127化為二進制,并補足7位得到10000010,放入第29到第23位。最后表示11.9為:補碼加127

01000001001111100110011001100110對應十六進制為413E6666逆序存放驗證#include<stdio.h>voidmain(){ floata=11.9; int*p=(int*)&a; printf("%x\n",*p);}float示例二0.0525D=0.00001101011100001010001111010111000010100011B=1.101011100001010001111010111000010100011*2(-5)藏1尾數(shù)為101011100001010001111010111000010100011階碼-510000101原碼11111011補碼+01111111+12701111010階碼正數(shù)符號位為00011110101010111000010100011110101110000101000113D570A3D驗證:#include<stdio.h>voidmain(){ floata=0.0525; int*p=(int*)&a; printf("%x\n",*p);}將一個內(nèi)存存儲的float二進制格式轉(zhuǎn)化為十進制的步驟:

(1)將第22位到第0位的二進制數(shù)寫出來,在最左邊補一位“1”,得到二十四位有效數(shù)字。將小數(shù)點點在最左邊那個“1”的右邊。

(2)取出第29到第23位所表示的值n。當30位是“0”時將n各位求反。當30位是“

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論