![](/img/trans.png)
[英]Reinterpret bytes as float in C (IEEE 754 single-precision binary)
[英]Decimal to IEEE 754 Single-precision IEEE 754 code using C
我們在課堂上有一個作業,使用 c 從十進制轉換為單精度,我完全迷失了。
這是任務:
本實驗的最后一部分涉及編寫一個簡短的 c 算法。 每個學生都必須創建一個程序,將科學記數法浮點數作為輸入並以二進制和十六進制打印它的 IEE754 單精度值。
程序的輸出必須等於以下內容: “引入十進制浮點數(科學記數法):十進制浮點數 1.234500e-04 是十六進制的 3901725B(IEEE 754)。 “
到目前為止我們學到的#includes 是:stdio.h、math.h 和string.h,所以我認為我們不允許使用任何其他包含。 此外,我們還沒有學習struct
或union
或其中任何一個,因為我在其他示例中看到了這些,但我什么都不明白。
如果有人可以指導我制作此代碼,我將不勝感激!
指導我制作此代碼!
由於 OP 只要求提供指南:
研究scanf()
和"%f"
說明符
研究類型將float
轉換為uint32_t
。 查看可以將 unsigned int 位值復制為浮點數,但浮點值未正確返回給調用者函數並避免指針技巧。 請參閱什么是嚴格的別名規則?
研究printf()
和"%x"
說明符。
有很多方法可以打印二進制格式的 printf 轉換器嗎? .
有些非常一般(基數,2,3,10,16,36...)
您描述的作業分為三個部分:
檢查數字的字符並將它們轉換為浮點數。
打印浮點數的值。
打印浮點數的字節。
對於 1,不清楚您是打算自己編寫代碼來執行此操作還是使用庫例程。 對於庫例程,使用scanf
(從輸入讀取)或sscanf
(從char
數組讀取)。 如果您要自己做,那么,在您描述的級別上,我不希望需要一個確切的解決方案。 在這種情況下,您可以: 確定每個數字對應的十的冪,將數字乘以十的冪,然后對乘積求和。 例如,對於“1.234500e-04”,您會找到指數“-04”,將其轉換為int
,然后將 1 乘以pow(10, -5)
,將 2 乘以pow(10, -6)
,依此類推,然后添加產品。
對於 2,使用printf
打印。
對於 3,使用memcpy
將字節從float
復制到uint32_t
(查找標頭<stdint.h>
)並使用printf
打印其字節(查找標頭<inttypes.h>
以獲取要使用的正確格式說明符) . 或者,使用memcpy
將字節從float
復制到char
數組中,然后使用printf
和打印十六進制的格式說明符打印char
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.