簡體   English   中英

十進制到 IEEE 754 使用 C 的單精度 IEEE 754 代碼

[英]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,所以我認為我們不允許使用任何其他包含。 此外,我們還沒有學習structunion或其中任何一個,因為我在其他示例中看到了這些,但我什么都不明白。

如果有人可以指導我制作此代碼,我將不勝感激!

指導我制作此代碼!

由於 OP 只要求提供指南:

  1. 得到一個科學記數法浮點數

研究scanf()"%f"說明符

  1. 以 ... 十六進制打印它的 IEE754 單精度值

研究類型float轉換為uint32_t 查看可以將 unsigned int 位值復制為浮點數,但浮點值未正確返回給調用者函數並避免指針技巧。 請參閱什么是嚴格的別名規則?

研究printf()"%x"說明符。

  1. 打印 ... in ... 二進制

很多方法可以打印二進制格式的 printf 轉換器嗎? .
有些非常一般(基數,2,3,10,16,36...)

您描述的作業分為三個部分:

  1. 檢查數字的字符並將它們轉換為浮點數。

  2. 打印浮點數的值。

  3. 打印浮點數的字節。

對於 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM