Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Битовая логика.docx
Скачиваний:
2
Добавлен:
11.07.2019
Размер:
122.24 Кб
Скачать

Представление беззнаковых целых чисел в памяти эвм

Как известно, в К-разрядном двоичном числе может храниться 2k различных значений. Следует отметить, что 0 – это тоже значение, поэтому все максимальные значения беззнаковых типов нечетные. Для знаковых типов количество положительных и отрицательных чисел одинаково, поэтому нижняя граница знаковых типов равна половине количества различных комбинаций, т.е. для k разрядного числа это будет 2k-1. Очевидно, что верхняя граница у знаковых чисел будет (2k-1 - 1).

Общеизвестно, что в 1 байте храниться 8 бит. Таким образом для типа byte отводится 8 разрядов в двоичном представлении, для типа Word – 16 разрядов в двоичном представлении.

Представление целых беззнаковых чисел в памяти ЭВМ совпадает с их двоичным кодом, если не учитывать архитектуру процессора.

Чтобы получить внутреннее представление целого положительного числа N, хранящегося в К-разрядной ячейке, необходимо:

1. перевести число N в двоичную систему счисления;

2. полученный результат дополнить слева незначащими нулями до К разрядов.

3. Возможно инвертировать порядок байт (см. пример 2)

Часто этот формат хранения называют прямым кодом.

Пример 1

Найти представление числа 14 в памяти ЭВМ, если это тип byte.

Решение.

Переведем 1410 в двоичную. Это будет 11102.

Как видно из таблицы [Таблица 1. Стандартные целочисленные типы] размер byte равен 1 байту, т.е. 8 разрядам, и это беззнаковый тип.

Поэтому 1410=11102=000011102.

Зам. для удобства в записи числа вставляют пробелы после каждой четверки разрядов.

1410=11102=000011102=0000 11102

Это и является представлением числа в памяти ЭВМ.

Зам. часто для удобства число записывают в 16ричной системе:

0000 11102 = 0E16

Пример 2

Найти представление числа 1400 в памяти ЭВМ, если это тип word.

Решение.

Переведем 1400 10 в двоичную систему. Это будет 101011110002.

Как видно из таблицы [Таблица 1. Стандартные целочисленные типы] размер word равен 2 байтам, т.е. 16 разрядам, и это беззнаковый тип.

Поэтому 140010=1010 1111 0002=0000 1010 1111 0002.

Зам. для удобства в записи числа вставляют пробелы после каждой четверки разрядов.

0000 1010 1111 0002=057816

Старший байт в этом числе – 05, а младший – 78.

Казалось бы это и является внутренним представлением числа.

Но есть одно но – это уже не однобайтовый тип. Все объекты, большие байта, представляются на разных машинах по-разному, поэтому полагаться на какие-то определенные свойства было бы ошибкой. Короткие целые числа (обычно 16 битов, или 2 байта) могут иметь младший байт, расположенный как по меньшему адресу (иногда называют little-endian, младшеконечное расположение, порядок от младшего к старшему1), чем старший, так и по большему (big-endian, старшеконечное2). Выбор варианта произволен, а некоторые машины вообще поддерживают обе модели.

Таким образом, если машина является младшеконечной, то внутреннее представление числа будет 780516. А если старшеконечная машина, то внутреннее представление числа будет 057816. Поэтому ответ на вопрос о представлении числа в общем случае имеет 2 верных ответа (в данном случае 780516, 057816). Конкретный ответ можно дать только зная тип машины.

Вопрос – как определить, какая у пользователя машина?

Первый вариант – узнать, какой процессор у пользователя. Как показывает статистика, в России распространены процессоры x86.

Второй вариант очень прост – программирование – экспериментальная наука. Надо написать небольшую программу и посмотреть на результирующий файл в 16ричном коде.

Var

Temp : word;

F : file of word;

Begin

Temp := 1400;

Assign(f, ‘test.dat’);

Rewrite(f);

Write(f, temp);

Close(f);

End.

Например на машине, на которой писалось это методическое руководство, содержимое файла было «7805» в 16ричной системе, т.е. это младшеконечная машина.

Пример 3

Найти внутреннее представление числа 700, если это двухбайтовый беззнаковый тип.

Решение.

Переведем 700 из десятичной системы в двоичную.

70010=10 1011 11002.

Т.к. это двухбайтовый тип, то у него 16 разрядов, т.е.

70010=10 1011 11002=0000 0010 1011 11002=02BC16

В этом двухбайтовом числе 02 – старший байт, BC – младший байт.

Тогда для старшеконечной машины внутреннее представление числа будет BC0216, а для младшеконечной машины это будет 02BC16

Представление знаковых целых чисел в памяти ЭВМ

Целые числа со знаком обычно занимают в памяти компьютера один, два или четыре байта.  Для хранения целых чисел со знаком старший (левый) разряд в машинном слове отводится под знак числа (если число положительное, то в знаковый разряд записывается ноль, если число отрицательное – единица). Ровно половина из всех 2n  чисел будут отрицательными; учитывая необходимость нулевого значения, положительных будет на единицу меньше.

Таким образом, по первому биту в двоичном коде можно определить, положительное число или отрицательно.

Знаковые типы хранятся в памяти машины в дополнительном коде. Однако при работе с дополнительным кодом используется обратный код. Поэтому изучение формата хранения знаковых целых чисел начнем с него.