- •Оглавление
- •Представление чисел в памяти эвм
- •Представление беззнаковых целых чисел в памяти эвм
- •Обратный код
- •Пример 1.
- •Пример 2.
- •Пример 3.
- •Пример 4.
- •Пример 5.
- •Пример 2.
- •Пример 3.
- •Пример 4.
- •Пример 5.
- •Важное следствие (пример 2).
- •Представление вещественных типов в памяти эвм
- •Пример 1
- •Пример 2
- •Пример 2
- •Пример 3
- •Пример 4
- •Алгоритмы работы с числами, которые представлены строкой
- •Сложение положительных чисел, представленных в виде строки
- •Реализация алгоритма на Pascal
- •Умножение положительного числа, представленного в виде строки, на одноразрядный коэффициент
- •Реализация алгоритма на Pascal
- •Умножение двух положительных целых чисел, представленных в виде строки
- •Реализация алгоритма на Pascal
- •Сравнение двух целых чисел, представленных в виде строки
- •Реализация алгоритма на Pascal
- •Вычитание целых чисел, представленных в виде строки
- •Реализация алгоритма на Pascal
- •Реализация алгоритмов работы с целыми числами, представленными в виде строки на c#
Пример 4.
Перевести -1 в обратный код, если это знаковое однобайтовое число.
Решение.
Т.к. это однобайтовая величина, то для него отводится 8 разрядов. Поэтому ответ будет вида ХХХХ ХХХХ.
Т.к. -1 – отрицательное число, то старший бит будет равен 1. Поэтому ответ будет вида 1ХХХ ХХХХ, т.е. у нас «осталось» 7 бит для числа.
Переведем 1 в двоичную систему.
110=000 00012
Т.к. это число отрицательное, то все биты в числе 1 необходимо инвертировать
000 00012
111 11102
Теперь «склеим» знаковый бит (1) и полученное число (111 11102). Получим 1111 11102. Для удобства записи запишем в 16ричной системе: FE16.
Следствие (одна из причин, по которой обратный код редко употребляется).
Зададимся простым вопросом – сколько будет 1 + (-1). Очевидно, что 0.
Проверим это.
+1 в обратном коде будет 0000 0001
-1 в обратном коде будет 1111 1110
Сложим эти два числа.
0000 0001
1111 1110
1111 1111. Это число из примера, т.е. ответ оказался не 0, а -128.
В дополнительном коде, который будет рассмотрен ниже, этот недостаток сумели убрать.
Пример 5.
Перевести -1000 в обратный код, если это двухбайтовое знаковое число.
Решение.
Т.к. это двухбайтовая величина, то для него отводится 16 разрядов. Поэтому ответ будет вида ХХХХ ХХХХ XXXX XXXX.
Т.к. -1000 – отрицательное число, то старший бит будет равен 1. Поэтому ответ будет вида 1ХХХ ХХХХ XXXX XXXX, т.е. у нас «осталось» 15 бит для числа.
Переведем 1000 в двоичную систему.
100010=11 1110 10002
Дополним спереди нулями до 15 разрядов
100010=11 1110 10002 = 000 0011 1110 10002
Т.к. это число отрицательное, то все биты в числе 1000 необходимо инвертировать
000 0011 1110 10002
111 1100 0001 01112
Теперь «склеим» знаковый бит (1) и полученное число (111 1100 0001 01112). Получим 1111 1100 0001 01112. Для удобства записи запишем в 16ричной системе. FС1716.
В старшеконечной машине число будет 17FС16
В младшеконечной машине число будет FC1716.
Дополнительный код
В дополнительном коде могут храниться целые знаковые числа. Так же как и в обратном коде, старший бит является знаковым (1, если число отрицательное, и 0 – если число положительное)
Для положительных чисел дополнительный код полностью совпадает с обратным кодом (который совпадает с прямым кодом).
Дополнительный код отрицательного числа m равен 2k-|m|, где k - количество разрядов в ячейке. От сюда вытекает алгоритм получения дополнительного кода:
1. получить прямой код числа;
2. получить обратный код этого числа (инвертировать все биты).
3. к полученному числу прибавить 1.
Пример 1.
Перевести число 16 в дополнительный код, если это двухбайтовое знаковое число
Решение.
Т.к. это двухбайтовая величина, то для него отводится 16 разрядов. Поэтому ответ будет вида ХХХХ ХХХХ ХХХХ ХХХХ.
Т.к. 16 – положительное число, то старший бит будет равен 0. Поэтому ответ будет вида 0ХХХ ХХХХ ХХХХ ХХХХ, т.к. у нас «осталось» 15 бит для числа.
Переведем 16 в двоичную систему.
1610=100002. Т.к. у нас «осталось» 15 бит для числа, дополним полученное число нулями слево до 15 разрядов.
1610=100002=000 0000 0001 00002.
Теперь «склеим» знаковый бит (0) и полученное число (000 0000 0001 00002). Получим 0000 0000 0001 00002. Для удобства записи запишем в 16ричной системе. 001016. У этого числа старший бит равен «00», а младший бит – «10».
Если машина младшеконечная, то число будет храниться в виде «0010» в памяти машины.
Если машина старшеконечная, то число будет хранится в виде «1000» в памяти машины.