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

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

  • ЭВМ. Лаб1. Отчет по лабораторной работе 1 исследование внутреннего представления различных форматов данных


    Скачать 273.72 Kb.
    НазваниеОтчет по лабораторной работе 1 исследование внутреннего представления различных форматов данных
    Дата09.11.2019
    Размер273.72 Kb.
    Формат файлаdocx
    Имя файлаЛаб1.docx
    ТипОтчет
    #94219
    страница2 из 2
    1   2


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

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

    //
    #include "stdafx.h"

    #include

    #include

    #include
    using namespace std;
    const int F = sizeof(float);

    const int D = sizeof(double);

    int n;

    int N; // номер бита, который нужно изменить

    bool m; // значение, на которое нужно изменить указанный бит
    union

    {

    float n;

    unsigned char C[F];

    } Flo;
    union

    {

    double n;

    unsigned char C[D];

    } Dou;
    void Cel(int n) // вывод числа

    {

    int i = sizeof(n) * 8 - 1;
    cout << ((n >> i) & 1) << " ";

    --i;
    for (i; i >= 0; --i)

    cout << ((n >> i) & 1);

    cout << endl;

    }
    void Izm_Cel() // изменение бита

    {

    cout << endl << "Какой бит хотите изменить?" << endl << endl;

    cin >> N;

    cout << "На какой хотите изменить? Введите 0 или 1: ";

    cin >> m;

    if (m)

    n = n | (1 << N);

    else

    n = n & (

    (1 << N));

    Cel(n);

    cout << n;

    }
    void Vech(unsigned char C[], int R, int k) // k = 2 - double, k = 3, float

    {

    int i = sizeof(C[R - 1]) * 8 - 1;

    cout << ((C[R - 1] >> i) & 1) << " "; // выводим первую цифру в 2СС

    --i;
    for (i; i >= 0; --i)

    cout << ((C[R - 1] >> i) & 1);

    i = sizeof(C[R - 2]) * 8 - 1;
    if (k == 2)

    {

    cout << ((C[R - 2] >> i) & 1) << " ";

    i--;

    }

    else

    {

    for (i; i > 3; --i)

    cout << ((C[R - 2] >> i) & 1);

    cout << " ";

    }
    for (i; i >= 0; --i)

    cout << ((C[R - 2] >> i) & 1);
    for (int j = R - 3; j >= 0; --j)

    {

    i = sizeof(C[j]) * 8 - 1;
    for (i; i >= 0; --i)

    cout << ((C[j] >> i) & 1);

    }

    }
    void Izm_bitaf(int n)

    {

    N = N - n * 8; // узнаём номера бита в данном байте

    if (m)

    Flo.C[n] = Flo.C[n] | (1 << N);

    else

    Flo.C[n] = Flo.C[n] & ((1 << N));

    }
    void Izm_bita(int n)

    {

    N = N - n * 8; // узнаём номера бита в данном байте

    if (m)

    Dou.C[n] = Dou.C[n] | (1 << N);

    else

    Dou.C[n] = Dou.C[n] & ((1 << N));

    }
    void Izm_Flo() // выясняем, в каком байте находится тот бит, который нужно изменить

    {

    cout << endl << "Какой бит хотите изменить?" << endl << endl;

    cin >> N;

    cout << "На какой хотите изменить? Введите 0 или 1: ";

    cin >> m;

    if (N < 8)

    Izm_bitaf(0);

    else

    {

    if (N < 16)

    Izm_bitaf(1);

    else

    {

    if (N < 24)

    Izm_bitaf(2);

    else

    Izm_bitaf(3);

    }

    }

    Vech(Flo.C, F, 2);

    cout << endl << Flo.n;

    }
    void Izm_Dou() // выясняем, в каком байте находится тот бит, который нужно изменить

    {

    cout << endl << "Какой бит хотите изменить?" << endl << endl;

    cin >> N;

    cout << "На какой хотите изменить? Введите 0 или 1: ";

    cin >> m;

    if (N < 8)

    Izm_bita(0);

    else

    {

    if (N < 16)

    Izm_bita(1);

    else

    {

    if (N < 24)

    Izm_bita(2);

    else

    {

    if (N < 32)

    Izm_bita(3);

    else

    {

    if (N < 40)

    Izm_bita(4);

    else

    {

    if (N < 48)

    Izm_bita(5);

    else

    {

    if (N < 56)

    Izm_bita(6);

    else

    Izm_bita(7);

    }

    }
    }

    }

    }

    }

    Vech(Dou.C, D, 2);

    cout << endl << Dou.n;

    }

    int main()

    {

    setlocale(0, "");

    bool s = 1;

    int k;

    do

    {

    cout << "Выберите тип числа: \n 1. int \n 2. float \n 3. double \n";

    cin >> k;

    switch (k)

    {

    case (1):

    {

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

    cin >> n;

    Cel(n);

    Izm_Cel();

    }

    break;

    case (2):

    {

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

    cin >> Flo.n;

    Vech(Flo.C, F, k);

    Izm_Flo();

    }

    break;
    case (3):

    {

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

    cin >> Dou.n;

    Vech(Dou.C, D, k);

    Izm_Dou();

    }

    break;

    default:

    cout << "Ошибка! Введите 1, 2 или 3!" << endl;

    }

    cout << endl << "Для продолжения нажмите любую клавишу, для выхода Esc." << endl;

    s = (_getch() != 27);

    } while (s);

    return 0;

    }

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


    Рис.1 скриншот программы для числа типа int.


    Рис.2 скриншот программы для числа типа double.

    1   2


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