- •Системы счисления Методические указания
- •Задача 1. Выполнить указанные в таблице задания Варианты
- •Пример выполнения
- •Задача 2. В какой системе счисления справедливо заданное равенство? Варианты
- •Пример выполнения
- •Задача 3. Найти основание X системы счисления, для которой выполняется равенство Варианты
- •Пример выполнения
- •Пример выполнения
- •Задача 5. Для заданного десятичного числа выполнить следующие преобразования систем счисления: 108101610; 816 Варианты
- •Пример выполнения
- •Представление информации Методические указания Ячейки памяти и машинные двоичные коды
- •Представление целых чисел без знака
- •Представление целых чисел со знаком
- •Представление вещественных чисел в типе Single
- •Задача 6. Два числа x1 и x2 хранятся в формате 1 байт со знаком. Заданы их шестнадцатеричные коды. Чему равны их фактические десятичные значения? Варианты
- •Пример выполнения
- •Задача 7. Проинтерпретировать 16 разрядов памяти компьютера в соответствии со следующими типами языка Паскаль: Byte, Shortint, Char, Word, Integer. Варианты
- •Пример выполнения
- •Задача 8. Переменная а имеет тип Single языка Паскаль. Задано представление значения а в шестнадцатеричной системе счисления. Чему равно десятичное значение числа a? Варианты
- •Пример выполнения
- •Основы алгебры логики Методические указания
- •Задача 9. Вычислить значение логического выражения на заданном наборе логических переменных. Варианты
- •Пример выполнения
- •Задача 10. Проверить справедливость равенства, используя законы алгебры логики. Варианты
- •Пример выполнения
- •Задача 11. Упростить логическое выражение, используя законы алгебры логики Варианты
- •Пример выполнения
- •Варианты заданий к контрольной работе
- •Литература
- •Русские буквы
- •Приложение б. Шаблон оформления титульного листа
Представление целых чисел без знака
Это всё очень просто: целое число без знака просто переводится в двоичную СС и слева дополняется незначащими нулями так, чтобы общее количество двоичных цифр равнялось – длине ячейки памяти, выделяемой под величины заданного типа.
Представление целых чисел со знаком
В современных компьютерах целые числа хранятся в дополнительном коде. Помимо дополнительного кода в теории известны, а в недалёком прошлом применялись и в реальных ЭВМ, прямой и обратный (инверсный) коды.
Чтобы осознать, – чем отличается машинный двоичный код числа от записи этого числа в двоичной системе счисления, следует знать следующие факты.
Запись числа в двоичной системе счисления, как и в десятичной, содержит только информационно необходимые цифры, незначащие нули практически никогда не записываются (за исключением специальных рассмотрений).
Машинный же код – это запись числа с помощью фиксированного количества разрядов – количества разрядов в выделяемой под число ячейки памяти ЭВМ. Например, однобайтные ячейки памяти содержат восьмибитные коды, при этом двоичное число 101 представляется в виде 00000101; это представление и называется однобайтным машинным кодом двоичного числа 101. Итак, машинный код положительного двоичного числа часто содержит незначащие лидирующие нули – это совсем просто!
В двоичной системе счисления, как и в десятичной, положительные числа могут записываться и без знака, например, 101, и со знаком, например, +101. Отрицательные числа всегда записываются только со знаком, например, –101.
Машинные двоичные коды знаков не имеют, они состоят только из двоичных цифр, называемых битами.
Общее количество кодов, представимых в k-битной ячейке памяти равно 2k. Действительно, первый бит порождает две комбинации (0 и 1), каждая из этих комбинаций может быть взята с каждой из двух таких же комбинаций второго бита – получаем 4 комбинации, каждая из этих четырёх комбинаций может быть взята с двумя комбинациями третьего бита – получаем 8=23 комбинации, и так далее до k-го бита.
Первая половина кодов (их количество, естественно, равно 2k/2=2k-1) выделяется для хранения неотрицательных чисел – нуля и положительных значений. Вторая половина кодов (их тоже 2k-1) выделяется для хранения отрицательных чисел.
Замечательное следствие такого разделения кодов состоит в том, что коды всех неотрицательных чисел содержат в старшем (самом левом) бите ноль, а коды всех отрицательных чисел содержат в старшем бите единицу. Это следствие послужило основанием того, что во многих учебниках по информатике утверждается следующее: «… Старший разряд двоичного кода числа является знаковым: ноль кодирует знак плюс, а единица – знак минус». И скажите, что это не так!
Естественно, любая последовательность бит может быть интерпретирована как беззнаковое число – положительное или ноль. Мы называем эту интерпретацию арифметическим значением двоичного машинного кода и обозначаем буквой U.
Интерпретационная формула машинного кода целого числа имеет вид:
(2)
Как видно из формулы (2), во всех кодах – и прямом, и обратном, и дополнительном хранимые положительные числа представляются таким образом, что арифметическое значение U двоичного машинного кода совпадает с хранимым значением Х.
Несложно догадаться, как получается двоичный машинный код неотрицательного числа – двоичное представление числа дополняется слева незначащими лидирующими нулями до k разрядов – длины ячейки памяти ЭВМ. С кодами отрицательных чисел несколько сложнее. В общем случае формулу генерации кода можно получить из формулы (2):
(3)
Если последние две строчки у вас не
получаются, то заметим, что при
имеем:
и
.
Естественно, предполагается, что
результаты вычислений записываются в
виде последовательности k
бит.
Прямой код – самый простой. В нём используется представление числа в привычной форме: «знак»«абсолютная величина». При этом старший разряд ячейки отводится под знак, а остальные – под двоичный код абсолютной величины. Например, прямые коды двоичных чисел 1001 и –1001 для 8-разрядной ячейки таковы: 00001001 и 10001001 соответственно.
Обратный код положительного числа
совпадает с его прямым кодом. Обратный
код отрицательного числа Х представляет
собой двоичный код числа U
= 2k – 1 – |Х|, где k – количество
разрядов используемой ячейки памяти
(в однобайтном формате k = 8). Код разности
2k – 1 представляет собой k
единиц, поэтому разность 2k – 1 –
|Х| получается очень просто: путём
инвертирования разрядов прямого кода
|Х| (единицы заменяются
нулями, а нули – единицами). Таким
образом, обратный код отрицательного
числа образуется инвертированием
разрядов прямого кода абсолютной
величины этого числа. Например, обратный
код двоичного числа –1001 для 8-разрядной
ячейки таков:
.
Дополнительный код положительного
числа совпадает с его прямым кодом.
Дополнительный код отрицательного
числа Х представляет собой двоичный
код числа U = 2k –
|Х|, где k, по-прежнему, – количество
разрядов используемой ячейки памяти.
Нетрудно понять, что дополнительный
код отрицательного числа может быть
получен путём прибавления единицы к
обратному коду этого числа. Например,
дополнительный код двоичного числа
–1001 для 8-разрядной ячейки таков:
.
