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

  • отчет

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


    Скачать 60.25 Kb.
    НазваниеИсследование внутреннего представления различных форматов данных
    Дата18.11.2022
    Размер60.25 Kb.
    Формат файлаdocx
    Имя файлаLaboratornaya_rabota_1.docx
    ТипИсследование
    #797546


    Министерство образования и науки Российской Федерации

    Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

    «Санкт-Петербургский Государственный Электротехнический Университет «ЛЭТИ» им. В.И. Ульянова (Ленина)»

    Кафедра вычислительной техники


    отчет

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

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

    Тема: Исследование внутреннего представления различных форматов данных


    Студент гр. 5392




    Нургазы Б.К

    Студент гр. 5392




    Юсупов Н.Г.

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




    Иванов Д.М.



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

    2017

    Задание:





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

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

    3. Произвести зеркальную перестановку битов, количество которых и номер старшего бита задаются пользователем

    4. Вывести полученные данные на экран


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


    #include "stdafx.h"

    #include

    #include

    #include

    #include


    using namespace std;





    void printChar(unsigned char number)

    {

    for (int i = 0;i < 8;++i)

    {

    cout << ((number >> (8 - i - 1)) & 1) << " ";

    }

    cout << endl;

    }



    unsigned char ReverseBits(unsigned char number, int old, int n) {

    int k = 0;

    for (int i = 0;i < 8;++i)

    {

    for (int j = 0;j < 8;++j)

    {

    if (i == old - n + 1+k && j == old-k && i

    {

    k++;

    if ((number & (1 << i)) && !(number & (1 << j)))

    {

    number |= (1 << j);

    number &=

    (1 << i);

    }

    else if ((number & (1 << j)) && !(number & (1 <

    {

    number |= (1 << i);

    number &=

    (1 << j);

    }

    }

    }

    }

    return number;

    }


    union LongD

    {

    long double l;

    char ld1[8];

    };


    int a[64];

    int p = 0;


    void printLongDouble(LongD y)

    {

    for (int i = 0;i < 8;++i)

    {

    for (int j = 0;j < 8;++j)

    {

    cout << ((y.ld1[8 - i - 1] >> (8 - j - 1)) & 1) << " ";

    a[p] = ((y.ld1[8 - i - 1] >> (8 - j - 1)) & 1);

    p++;

    }

    }

    cout << endl;

    }



    LongD ReverseBitsLD(LongD y, int old, int n) {

    int k = 0;

    for (int i = 0;i < 64;++i)

    {

    for (int j = 0;j < 64;++j)

    {

    if (i == old - n + 1 + k && j == old - k && i

    {

    swap(a[i],a[j]);

    k++;

    }

    }

    }

    for (int i = 0;i < 64;++i)

    {

    cout << a[i] << " ";


    }

    return y;

    }



    int main() {

    setlocale(0, "");

    unsigned char symbol;

    int c;

    int n;

    cout << " Тип данных: char " << endl;

    cout << "Введите символ: ";

    cin >> symbol;

    cout << "Введите старший разряд: ";

    cin >> c;

    cout << "Введите количество разрядов: ";

    cin >> n;

    system("cls");

    cout << "Введенный символ:";

    cout << symbol << endl;

    cout << "Представление введенного символа в двоичном коде: ";

    printChar(symbol);

    unsigned char y = ReverseBits(symbol, c, n);

    cout << "Новый символ:";

    cout << char(y) << endl;

    cout << "Представление символа в двоичном коде после преобразования: ";

    printChar(y);





    int q;

    int w;

    cin.get();

    cin.get();

    system("cls");

    LongD yy;

    cout << " Тип данных: long double " << endl;

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

    cin >> yy.l;

    cout << "Введите старший разряд: ";

    cin >> q;

    cout << "Введите количество разрядов: ";

    cin >> w;

    system("cls");

    cout << "Представление введенного числа в двоичном коде: ";

    printLongDouble(yy);

    cout << endl;


    cout << "Представление числа в двоичном коде после преобразования: ";

    cout << endl;

    yy = ReverseBitsLD(yy, q, w);

    cin.get();

    cin.get();

    return 0;

    }










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



    Рисунок 1 - Обработка типа char



    Рисунок 2 - Обработка типа double



    Структурная схема аппаратных средств, используемых при выполнении программы:




    ЦП – центральный процессор.

    АЛУ – арифметико-логическое устройство.

    УУ – устройство управления.

    ОЗУ – оперативное запоминающее устройство.

    ПЗУ – постоянное запоминающее устройство.

    НЖМД – накопитель на жёстком магнитном диске (винчестер).


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