Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ОргЭВМ(лабы 1-5) / отчетлаба1Середа

.docx
Скачиваний:
123
Добавлен:
28.12.2016
Размер:
558.3 Кб
Скачать

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

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

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

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

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

отчет

по лабораторной работе №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 <iostream>

#include <vector>

#include <string>

#include <list>

using namespace std;

string FunctionInt2(short int a)

{

vector<char> 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<int>((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)<<endl;

system("Pause");

return 0;

}

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

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

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

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

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

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

Соседние файлы в папке ОргЭВМ(лабы 1-5)