- •Оглавление
- •Представление чисел в памяти эвм
- •Представление беззнаковых целых чисел в памяти эвм
- •Обратный код
- •Пример 1.
- •Пример 2.
- •Пример 3.
- •Пример 4.
- •Пример 5.
- •Пример 2.
- •Пример 3.
- •Пример 4.
- •Пример 5.
- •Важное следствие (пример 2).
- •Представление вещественных типов в памяти эвм
- •Пример 1
- •Пример 2
- •Пример 2
- •Пример 3
- •Пример 4
- •Алгоритмы работы с числами, которые представлены строкой
- •Сложение положительных чисел, представленных в виде строки
- •Реализация алгоритма на Pascal
- •Умножение положительного числа, представленного в виде строки, на одноразрядный коэффициент
- •Реализация алгоритма на Pascal
- •Умножение двух положительных целых чисел, представленных в виде строки
- •Реализация алгоритма на Pascal
- •Сравнение двух целых чисел, представленных в виде строки
- •Реализация алгоритма на Pascal
- •Вычитание целых чисел, представленных в виде строки
- •Реализация алгоритма на Pascal
- •Реализация алгоритмов работы с целыми числами, представленными в виде строки на c#
Пример 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
Теперь прибавим к полученному числу 1. Получим 1000 00002. Т.к. у нас оставалось 7 бит для числа, то уберем старший бит. Получим 000 00002
Теперь «склеим» знаковый бит (1) и полученное число (000 00002). Получим 1000 00002. Для удобства записи запишем в 16ричной системе: 8016.
Пример 4.
Перевести -1 в дополнительный код, если это знаковое однобайтовое число.
Решение.
Т.к. это однобайтовая величина, то для него отводится 8 разрядов. Поэтому ответ будет вида ХХХХ ХХХХ.
Т.к. -1 – отрицательное число, то старший бит будет равен 1. Поэтому ответ будет вида 1ХХХ ХХХХ, т.е. у нас «осталось» 7 бит для числа.
Переведем 1 в двоичную систему.
110=000 00012
Т.к. это число отрицательное, то все биты в числе 1 необходимо инвертировать
000 00012
111 11102
Теперь прибавим к этому числу 1. Получим 111 11112. Теперь «склеим» знаковый бит (1) и полученное число (111 11112). Получим 1111 11112. Для удобства записи запишем в 16ричной системе: FE16.
Следствие (одна из причин, по которой дополнительный код часто употребляется).
Зададимся простым вопросом – сколько будет 1 + (-1). Очевидно, что 0.
Проверим это.
+1 в дополнительном коде будет 0000 0001
-1 в дополнительном коде будет 1111 1111
Сложим эти два числа.
0000 0001
1111 1111
0000 0000. Это число равно +0, т.е. 0. Поэтому в дополнительном коде можно суммировать любые числа (положительные и отрицательные).
Замечание. Если быть более точным, то в данном сложении у нас «вышла» единица за 8ми разрядную сетку. Но при сложении чисел на языках высокого уровня это можно не учитывать.