久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3055|回復: 15
打印 上一主題 下一主題
收起左側

求教浮點數的十進制轉十六進制原理和代碼

  [復制鏈接]
跳轉到指定樓層
樓主
ID:1041056 發表于 2022-8-4 21:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
50黑幣
eg:1對應3F800000
100對應42C80000

十進制是double類型,十六進制是字符
在線轉換鏈接如下,可供驗證
ToolTT在線工具箱

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:584814 發表于 2022-8-5 08:14 | 只看該作者
浮點數的十進制轉十六進制原理可百度
浮點數的十進制轉十六進制代碼可百度
回答完畢
回復

使用道具 舉報

板凳
ID:123289 發表于 2022-8-5 08:20 | 只看該作者
計算機只認識二進制數,它不認識【負】、【小數點】。怎么辦呢?就人為規定一下。
規定,也就是協議。只要“計算機”(其實是使用的人)能遵守這個協議,也就認識【負】、【小數點】了。
顯然,協議規定不同,負數、小數的表示方式也就不同(建議在一個系統中,用同樣的協議)。
就樓主的問題,稍候給出兩種常用的浮點數的表示方式。
關鍵點:負號在哪?小數點在哪?
回復

使用道具 舉報

地板
ID:883242 發表于 2022-8-5 08:44 | 只看該作者
你只管用就可以了,無需知道具體代碼。但凡是支持浮點數,包括float和/或double的編譯器,必定在函數庫里面實現了你所需要的功能。
回復

使用道具 舉報

5#
ID:401564 發表于 2022-8-5 08:45 | 只看該作者
原理就是IEEE規定的數據存放格式,我到現在都不知道怎么轉換
但這并不影響我用C語言寫程序
我不知道你要知道浮點型轉換成16進制有什么用?
回復

使用道具 舉報

6#
ID:123289 發表于 2022-8-5 09:01 | 只看該作者
兩種四個字節組成的浮點數:(一般夠用了,如果要求特別,當然可以增加字節數,重新定義)
先給出四個字節:通常從存放的位置看,從低地址至高地址(反之只有你能說清楚也可以),A1,A2,A3,A4。
再細分:A1.0-A1.7,A2.0-......,A4.0-A4.7。
為了方便說明重新定義一下:A4.7=D31,A4.6=D30....,A1.7=D7,......,A1.0=D0,這樣就得到一個數:D31,D30,......,D0。
浮點數的第一種表示方式:階碼=D30~D23,符號=D31,底數=1(最高位隱1)+D22~D0 1=3F800000,2=40000000  【我在STM8用過】
浮點數的第二種表示方式:階碼=D31~D24,符號=D23,底數=1(最高位隱1)+D22~D0 1=7F000000,2=80000000  【我在51中用過】
不同的編譯平臺或軟件,可能采用不同的表示方式,亦或是有人故意的。不過不用擔心,同一個平臺是不可能混淆的。
回復

使用道具 舉報

7#
ID:844772 發表于 2022-8-5 09:44 | 只看該作者
我試試說一下,不講單精度了,只說你要的雙精度,雙精度浮點是8字節,64位,最高位是符號位,顯示正負,接著11位是指數位,剩余52位是小數位。它的保存是用科學計數法保存數值,也就是說任何數都以,二進制的小數和二進制的指數表示,例子看你的鏈接就明白。另外,指數也有正負,所以指數統一加偏移量1023后存儲。別看說的麻煩,程序及其簡單,因為使用強制類轉換,一句搞掂。
double fff=1.0;  //
unsigned char *htext=(unsigned char *)& fff; //其實就這一句就轉成十六進制了。
//下面驗證一下 htext必然是八字節啊,只是有的系統是從小到大排列
for ( char i=0;i<8;i++)
  printf (" %02x",htext[7-i]);

回復

使用道具 舉報

8#
ID:123289 發表于 2022-8-5 09:52 | 只看該作者
本帖最后由 yzwzfyz 于 2022-8-5 10:08 編輯

解碼:浮點數的值 = [符號]底數 * 2^(階碼-(7FH+23)) = [符號]底數 * 2^(階碼-96H)
23:(這里用10進制寫是為了方便您理解),因為底數有24位,其最高位的1就代表2^23。
階碼:小數點的位置。
7FH:(這里用16進制寫是突出一個字節0-FFH的中位數7FH,用10進制寫成127也一樣),這樣階碼表示的小數點位置向左向右有127位移動空間。

符號:占1位,1為負數,0為正數。
階碼:占8位,無符號數=0-FFH(0-255),理解為方次,階碼=75,就表示:2的75次方。也可以理解為小數點的位置。
底數:24位,正常的數,補碼,只剩余23位:D22-D0,何來24位呢?
特別注意:強制規定(也是妙處),底數雖然沒有D23,但就是認為有D23,且D23=1。D23是隱含1!
如果實際中D23偏偏是0呢?比如底數據=0111010……(如果實際底數首位D23=0)。
沒有關系,通過將底數左移,必能使首位D23=1,本例左移一位即變成111010……,D23就=1了,再將階碼減去左移的位數,本例階碼-1就平衡掉底數的左移了。
回復

使用道具 舉報

9#
ID:123289 發表于 2022-8-5 10:28 | 只看該作者
本帖最后由 yzwzfyz 于 2022-8-5 14:39 編輯

1對應3F800000
100對應42C80000
浮點數格式:階碼=D30~D23,符號=D31,底數=1(最高位隱1)+D22~D0

解:3F800000 = 00111111,10000000,0000H
首位:D31 = 0,正數。
階碼:D30-D23 = 0111111,1 = 7FH
底數:D22-D0 = 0000000,0000H,D23強制隱含=1,即底數 = 10000000,0000H = 800000H
解碼:3F800000的值 = 800000H * 2^(7FH-(7FH+23)) = 800000H * 2^(-23) = 1

解:42C80000 = 01000010,11001000,0000H
首位:D31 = 0,正數。
階碼:D30-D23 = 1000010,1 = 85H
底數:D22-D0 = 1001000,0000H,D23強制隱含=1,即底數 = 11001000,0000H = C80000H
解碼:42C80000的值 = C80000H * 2^(85H-96H) = 13107200 * 2^(-17) = 100
回復

使用道具 舉報

10#
ID:123289 發表于 2022-8-5 11:26 | 只看該作者
浮點數的十進制轉十六進制原理:
第一、這里有個誤區:浮點數的十進制?
浮點數在計算機的內存里,幾乎都是以二進制格式存儲的,如果你要強行將其轉成10進制,那么又有新的問題出現,10進制的表達方式是什么?
如123456,可以用6個字節表示:01H,02H,03H,04H,05H,06H。也可以用3個字節表示,即BCD碼:12H,34H,56H。
不懂匯編語言,是不太好理解的。
第二、如果浮點數有小數,在16進行中如何表示小數呢?如:3.14。
這個問題涉及浮點數與定點數。比如,用4個字節來表示,前三個字節表示整數,后一個字節表示小數(這叫定點數,規定了小數點的位置,看似簡單,卻有難點!)。
難點1:整數有限制,不能大于FFFFFFH=16777215,否則溢出,這還好說好解決。
難點2:更麻煩的是,小數0.14,你幾乎想象不出它的如何寫!
以3.5為例:3.5可以寫成:00H,00H,03H,80H。
能不能寫成:00H,00H,03H,05H呢?不能!你做個3.5+3.5就知道為何,16進制的0.5為何要寫成80H而不是05H了。
討厭的小數部分0.14如何用16進行表達,就不在這里繁瑣了,還是那句話:不懂匯編語言,是不太好理解的。(3.14在這里只能近似地寫成00H,00H,03H,24H,而不是00H,00H,03H,14H,小數部分要先乘以256,然后而存入整數部分)
樓主要:【求教浮點數的十進制轉十六進制原理和代碼】,建議先學通匯編。
否則:就聽取樓上其它人的建議吧。
不是不講給你聽,而是比較復雜,你也缺一些課,不易簡單地就能讓你明白。
回復

使用道具 舉報

11#
ID:57657 發表于 2022-8-5 12:23 | 只看該作者
Y_G_G 發表于 2022-8-5 08:45
原理就是IEEE規定的數據存放格式,我到現在都不知道怎么轉換
但這并不影響我用C語言寫程序
我不知道你要知 ...

浮點數的傳輸、存儲可以用union結構進行轉換。
回復

使用道具 舉報

12#
ID:1034262 發表于 2022-8-5 15:07 | 只看該作者
不是編譯器處理的嗎?不需要自己寫程序的。
回復

使用道具 舉報

13#
ID:462768 發表于 2022-8-5 17:29 | 只看該作者
這種底層的東西,禁止轉換,編程入門書上就有
回復

使用道具 舉報

14#
ID:139866 發表于 2022-8-9 13:48 | 只看該作者
m2006410 發表于 2022-8-5 17:29
這種底層的東西,禁止轉換,編程入門書上就有

你也說了,是入門書,而且我估計不是嵌入式入門書
回復

使用道具 舉報

15#
ID:593706 發表于 2022-8-9 17:26 | 只看該作者
樓主詢問的是用單片機轉換,還是用計算機轉換呀?如果是用計算機進行轉換,我的貼子里有現成的轉換程序,如果是用單片機轉換,稍微復雜一些,單片機轉換主要有查表法和數組循環計算法
回復

使用道具 舉報

16#
ID:844772 發表于 2022-8-10 22:13 | 只看該作者
m2006410 發表于 2022-8-5 17:29
這種底層的東西,禁止轉換,編程入門書上就有

打錯字了吧,是徑直轉換,還是個經典程序
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 超碰97免费| 五月天国产视频 | 亚洲欧美日本在线 | 国产精品免费在线 | 国产高清视频在线观看 | 国产精品色综合 | 国产精品欧美一区二区三区不卡 | 国产精品久久久久久久久久 | 国产欧美日韩综合精品一区二区 | 一二三四在线视频观看社区 | 成人影院网站ww555久久精品 | 欧美九九 | 国产精品久久久久久久久久 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 中文字幕在线免费观看 | 97久久精品午夜一区二区 | 福利av在线 | 日韩欧美大片 | 中文字幕在线视频观看 | 久久久久久久电影 | 亚洲精品二区 | 亚洲美女在线一区 | 精品在线免费观看视频 | 成人福利网站 | 久久久久久黄 | 国产第一页在线播放 | 国产色婷婷精品综合在线手机播放 | 欧美一区二区大片 | 99久久精品一区二区毛片吞精 | 欧洲妇女成人淫片aaa视频 | 欧美一级在线免费观看 | 亚洲女人天堂成人av在线 | 精品九九 | 精品国产乱码久久久久久丨区2区 | 一区二区三区不卡视频 | av影音资源 | 久久精品 | 日韩久久在线 | 综合一区 | 羞羞在线观看视频 | 亚洲国产精品一区二区久久 |