Главная страница
Навигация по странице:

  • Цель работы

  • Текст программы

  • Примеры запуска программы

  • Контрольные вопросы

  • Структурная схема технических средств

  • отчетлаба1Середа. Исследование внутреннего представления различных форматов данных


    Скачать 0.53 Mb.
    НазваниеИсследование внутреннего представления различных форматов данных
    Дата03.05.2021
    Размер0.53 Mb.
    Формат файлаdocx
    Имя файлаотчетлаба1Середа.docx
    ТипИсследование
    #201225

    МИНОБРНАУКИ РОССИИ

    Санкт-Петербургский государственный

    электротехнический университет

    «ЛЭТИ» им. В.И. Ульянова (Ленина)

    Кафедра МО ЭВМ

    отчет

    по лабораторной работе №1

    по дисциплине «Организация ЭВМ и систем»

    Тема: ИССЛЕДОВАНИЕ ВНУТРЕННЕГО ПРЕДСТАВЛЕНИЯ РАЗЛИЧНЫХ ФОРМАТОВ ДАННЫХ

    Студентка гр. 4373




    Середа И.В.

    Преподаватель




    Иванов Д.М.

    Санкт-Петербург

    2016

    Цель работы: знакомство с внутренним представлением различных типов данных, используемых компьютером при их обработке.
    Общие положения

    При программировании на языке С++ используются 11 стандартных типов данных. Среди них можно выделить 3 группы:
    1. данные символьные и целого типа беззнаковые (с фиксированной запятой);
    2. данные символьные и целого типа со знаком (с фиксированной запятой),
    значения которых хранятся в двоичном дополнительном коде;
    3. данные вещественного типа (с плавающей запятой (точкой)).
    Вещественное число в памяти хранится с нормализованной мантиссой, значение которой в десятичном эквиваленте лежит в диапазоне от 1 до 2. Причём 2 не входит в границу диапазона. Если в процессе выполнения какой-­либо операции над данными с плавающей запятой значение мантиссы выходит из указанного диапазона, то в конце операции выполняется нормализация результата путем приведения значения мантиссы к указанному диапазону с соответствующим изменением значения порядка. Если значение мантиссы равно нулю или в процессе выполнения операции значение порядка становится меньше допустимой величины, то в результате выполнения операции сформируется так называемый «машинный ноль», то есть код, у которого значение всех бит равно нулю. Но если мантисса всегда нормализована, то старший её бит, то есть единицу, можно и не хранить в памяти. Стандартом предложено это бит не хранить в памяти и тем самым увеличить точность представления вещественных чисел в 2 раза. Эта единица присутствует неявно, то есть, скрыта от глаз наблюдателя и называется неявной единицей (implicit one). Отбрасывание старшей цифры мантиссы выполняется для форматов float и double, но не выполняется для long double. Порядок числа в соответствии с указанным форматом хранится сдвинутым», то есть к его действительному значению добавляется в зависимости от формата такое число, чтобы порядок Р был всегда неотрицательным. Для формата float прибавляется 127, для чисел формата double прибавляется 1023, а для формата long double добавляется 16383. Всегда неотрицательный порядок упрощает выполнение операции сравнения порядков и арифметических операций над ними, а также избавляет от необходимости выделять один бит для хранения знака порядка.

    Задание:

    1. В зависимости от номера варианта задания разработать алгоритм ввода с
    клавиатуры требуемых типов данных и показатьна экране их внутреннее
    представление в двоичной системе счисления.

    2. Написать и отладить программу на языке С++, реализующую
    разработанный алгоритм.

    3. В соответствии с заданием дополнить разработанный ранее алгоритм
    блоками для выполнения преобразования двоичного полученного кода
    исходного типа данных и последующего вывода преобразованного кода в
    двоичной системе счисления и в формате исходного данного.

    Вариант №6. Ввод данных short int и double.

    6. Выполнить циклический сдвиг в заданную сторону на некоторое вводимое с клавиатуры количество разрядов.
    Текст программы:

    // Лабораторная1.cpp: определяет точку входа для консольного приложения.

    //
    #include "stdafx.h"

    #include

    #include

    #include

    #include

    using namespace std;

    string FunctionInt2(short int a)

    {

    vector vector;

    while (a != 0)

    {

    char ost = a % 2;

    vector.insert(vector.begin(), ost == 0 ? '0' : '1');

    a /= 2;

    }

    size_t Length = vector.size();

    size_t zero_number = sizeof(short int) * 8 - Length;

    for (size_t i = 0; i < zero_number; i++)

    {

    vector.insert(vector.begin(), '0');

    }

    string result(vector.begin(), vector.end());

    return result;

    }

    string FunctionDouble(double b)

    {

    bool S;

    if (b > 0)

    bool S = 0;

    else

    S = 1;

    int cel = floor(b);

    double drob = b - cel;

    }

    int main()

    {

    setlocale(LC_ALL, "Russian");

    int k = static_cast((pow(2, sizeof(short int) * 8.0 - 1) - 1));

    int x;

    cout << "Введите число short int";

    cin >> x;

    if ((x > k) || (x < -(k + 1)))

    cout << "Число выходит за границы диапазона short int";

    else

    cout << FunctionInt2(x)<
    system("Pause");

    return 0;

    }

    Примеры запуска программы:

    1. Представление short int в двоичном виде и циклический сдвиг



    1. Представление double в двоичном виде и циклический сдвиг



    Контрольные вопросы
    1. В каком коде хранятся целые числа со знаком?
    В дополнительном коде
    2. Чем отличаются процессы сдвига влево и вправо для чисел со знаком и
    беззнаковых?
    Ничем

    3. В каком порядке следует выполнять действия для получения
    дополнительного кода двоичного целого числа из прямого кода?
    Побитовая инверсия → Прибавить 1
    4. Чем отличается циклический сдвиг двоичного кода от логического
    сдвига?
    В циклическом сдвиге на место нового бита встает «вытесненный», а в
    логическом 0
    5. Чем отличается логический сдвиг двоичного кода от арифметического
    сдвига?
    При сдвиге вправо в логическом на новое место встает бит,
    соответствующий знаку
    6. Как изменяется значение числа при арифметическом сдвиге на 1
    двоичный разряд влево?
    Умножается на 2
    7. Как изменяется значение числа при арифметическом сдвиге на 1
    двоичный разряд вправо?
    Делится на 2
    8.В каком порядке следует выполнять действия для получения прямого
    кода двоичного целого числа из дополнительного кода?
    Отнять 1 → Побитовая инверсия

    Структурная схема технических средств



    написать администратору сайта