- •Оглавление
- •Представление чисел в памяти эвм
- •Представление беззнаковых целых чисел в памяти эвм
- •Обратный код
- •Пример 1.
- •Пример 2.
- •Пример 3.
- •Пример 4.
- •Пример 5.
- •Пример 2.
- •Пример 3.
- •Пример 4.
- •Пример 5.
- •Важное следствие (пример 2).
- •Представление вещественных типов в памяти эвм
- •Пример 1
- •Пример 2
- •Пример 2
- •Пример 3
- •Пример 4
- •Алгоритмы работы с числами, которые представлены строкой
- •Сложение положительных чисел, представленных в виде строки
- •Реализация алгоритма на Pascal
- •Умножение положительного числа, представленного в виде строки, на одноразрядный коэффициент
- •Реализация алгоритма на Pascal
- •Умножение двух положительных целых чисел, представленных в виде строки
- •Реализация алгоритма на Pascal
- •Сравнение двух целых чисел, представленных в виде строки
- •Реализация алгоритма на Pascal
- •Вычитание целых чисел, представленных в виде строки
- •Реализация алгоритма на Pascal
- •Реализация алгоритмов работы с целыми числами, представленными в виде строки на c#
Обратный код
В обратном коде могут храниться положительные или отрицательные числа. В зависимости от того, какое это число (положительное или отрицательное) алгоритмы кодирования различаются.
Обратный код положительного числа совпадает с его прямым кодом. Чтобы получить внутреннее представление положительного целого числа А, хранящегося в n-разрядном машинном слове, необходимо:
1) записать в старший бит 0.
2) перевести число А в двоичную систему счисления;
3) полученный результат дополнить слева незначащими нулями до (n-1) разрядов
4) «склеить» знаковый бит и результат пункта 3.
Обратный код отрицательного числа получается инвертированием всех бит, кроме знакового.
Пример 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» в памяти машины.
Пример 2.
Перевести число 100737027 в обратный код, если это четырехбайтовое знаковое число
Решение.
Т.к. это четырехбайтовая величина, то для него отводится 32 разряда. Поэтому ответ будет вида ХХХХ ХХХХ ХХХХ ХХХХ ХХХХ ХХХХ ХХХХ ХХХХ.
Т.к. 100737027 – положительное число, то старший бит будет равен 0. Поэтому ответ будет вида 0ХХХ ХХХХ ХХХХ ХХХХ ХХХХ ХХХХ ХХХХ ХХХХ, т.к. у нас «осталось» 31 бит для числа.
Переведем 100737027 в двоичную систему, дополнив нулями до 31 бита.
100737027 10=000 0110 0000 0010 0000 0000 00112=0601200316
Теперь «склеим» знаковый бит (0) и полученное число (000 0110 0000 0010 0000 0000 00112). Получим 0000 0110 0000 0010 0000 0000 00112. Для удобства записи запишем в 16ричной системе. 0601200316. В этом числе содержатся следующий байты:0616, 0116, 2016, 0316
Если машина младшеконечная, то число будет храниться в виде «0601200316» в памяти машины, т.к. порядок байт не меняется
Если машина старшеконечная, то число будет хранится в виде «0320010616» в памяти машины, т.к. порядок байт инвертируется.
Пример 3.
Перевести -128 в обратный код, если это однобайтовое знаковое число
Решение.
Т.к. это однобайтовая величина, то для него отводится 8 разрядов. Поэтому ответ будет вида ХХХХ ХХХХ.
Т.к. -128 – отрицательное число, то старший бит будет равен 1. Поэтому ответ будет вида 1ХХХ ХХХХ, т.е. у нас «осталось» 7 бит для числа.
Переведем 128 в двоичную систему.
12810=1000 00002
Т.к. это число отрицательное, то все биты в числе 128 необходимо инвертировать
1000 00002
0111 11112
Т.к. у нас оставалось 7 бит для числа, то уберем старший бит, т.к. он незначащий. Получим 111 11112
Теперь «склеим» знаковый бит (1) и полученное число (111 11112). Получим 1111 11112. Для удобства записи запишем в 16ричной системе: FF16.