Десятичный в IEEE 754 код IEEE 754 одинарной точности с использованием C - PullRequest
0 голосов
/ 15 ноября 2018

У нас есть задание в классе для преобразования из десятичной дроби в одинарную точность с использованием c, и я полностью потерян.

Это задание: последняя часть этой лабораторной работы включает кодирование алгоритма короткого c.Каждый учащийся должен создать программу, которая получает в качестве входных данных число с плавающей запятой в научной нотации и печатает свое единственное значение точности IEE754 как в двоичном, так и в шестнадцатеричном виде.

Выход программы должен быть равен следующему:«Введите число с плавающей запятой в десятичном виде (научное обозначение): десятичное число с плавающей запятой 1.234500e-04 - это 3901725B в шестнадцатеричном формате (IEEE 754).«

===================================================================================

Включает в себя # включенные нами знания: stdio.h, math.h и string.h, поэтому я не думаю, что нам разрешено использовать любые другие включения.Кроме того, мы еще не изучили "struct" или "union" или что-либо из этого, потому что я видел их в других примерах и ничего не понимал.

Я был бы очень признателен, если бы кто-то мог помочь мне в созданииэтот код!

Спасибо заранее:)

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Задание, которое вы описываете, состоит из трех частей:

  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, затем напечатайте char, используя printf с указателем формата, который печатает шестнадцатеричное число.

0 голосов
/ 15 ноября 2018

проведите меня через этот код!

Поскольку OP запросил только руководство:

  1. получает число с плавающей запятой в научной нотации

Исследования scanf() и спецификатор "%f"

печатает его значение одинарной точности IEE754 в ... шестнадцатеричном

Исследования типа штамповки a float в uint32_t.Пересмотр Может копировать значения беззнаковых битов в виде числа с плавающей запятой, но значение с плавающей запятой неправильно возвращается в функцию вызывающей стороны и позволяет избежать хитрости указателя.См. Что такое строгое правило псевдонимов?

Исследование printf() и спецификатор "%x".

печатает ... в ... двоичном

Есть много способов Есть ли конвертер printf для печати в двоичном форматеформат? .
Некоторые очень общие (базовые, 2,3,10,16,36 ...)

...