- •Описать что такое побитные операции. Лекция 2: Двоичная и шестнадцатеричная арифметика. Представление чисел.
- •Перевод чисел из одной системы в другую. Перевод двоичных чисел.
- •Перевод 16-тиричных чисел.
- •Перевод десятичного число в двоичное.
- •Представление целых беззнаковых чисел в компьютере.
- •Представление отрицательных чисел в компьютере.
- •Представление вещественных чисел в компьютере.
- •Разные интерпретации одного и того же двоичного числа.
- •Двоичная арифметика. Сложение двоичных чисел.
- •Вычитание двух чисел.
- •Дизъюнкция
- •Равносильность
- •Отрицание
- •Основные законы булевой алгебры
- •Смещение двоичных чисел.
- •Карты Карно. Совершенная дизъюнктивная нормальная форма.
- •Совершенная конъюнктивная нормальная форма.
- •Принципы минимизации
- •Принципы склейки
- •Блок-схемы.
Перевод чисел из одной системы в другую. Перевод двоичных чисел.
Возьмём, к примеру, следующее двоичное число 1011. Разложим его по степеням двойки. Получим следующее:
1011 = 1 * 23 + 0 * 22 + 1 * 21 + 1 * 20
Выполнив все записанные действия, получим:
1 * 23 + 0 * 22 + 1 * 21 + 1 * 20 = 8 + 0+ 2 + 1 = 11.
Следовательно, двоичное число 1011 равно 11 в десятичной системе.
Отметим, что в двоичном представлении число имеет большее число разрядов, чем в десятичном.
Перевод 16-тиричных чисел.
Эти числа можно перевести двумя способами.
Так же как и прошлый раз представить число в виде суммы: anan-1….a2a1 = an * 16n-1 + an-1 * 16n-2 + …. + a2 * 161 + a1 * 160
Представить 16-тиричное число в двоичном виде, а затем только перевести его в 10-й вид.
Разберём второй способ подробнее. При переводе 16-тиричного числа в 2-е каждую 16-тиричную цифру заменяют соответствующей ей 2-й комбинацией из 4-х цифр. Например, необходимо перевести уже рассмотренное выше число 0xAB в двоичный код. “А” соответствует в двоичном виде число 0b1010 (см. таблицу 1), а число “B” – 0b1011. В итоге получаем 0b10101011.
Перевод десятичного число в двоичное.
Для того, чтобы преобразовать десятичное число в двоичное, его нужно разложить по степеням двойки.
Преобразование в двоичную систему производится следующим методом:
Если число не делится на 2, то отнимают двойку и в двоичное число пишут 1.
Если же делится, то ничего не отнимают и записывают ноль.
Возьмём десятичное число 23.
23/2=11+1
11/2=5+1
5/2=2+1
2/2=1+0
1/2=0+1
Наше искомое двоичное число 10111.
Представление целых беззнаковых чисел в компьютере.
Компьютер может обрабатывать данные, которые представлены в специальном виде - только с помощью нулей и единиц. Каждый 0 или 1 называют битом. Один бит - это минимальная единица информации, описывающая только 2 возможных состояния. Восемь битов объединяются в байт. Байт - основная единица представления информации в компьютере. Такое представление информации называют цифровым или двоичным. Обработка двоичных данных выполняется с помощью специальных правил, определяемых так называемой двоичной арифметикой.
В зависимости от решаемой задачи байт может содержать закодированное представление различных типов данных.
Простейшим и исторически первым является кодирование целых чисел. Целые числа представляются в двоичном виде следующим образом:
000000002 = 010 000000012 = 110 . . . . . . . . . . 111111112 = 25510
Диапазон целых чисел, кодируемых одним байтом, определяется числом возможных комбинаций из восьми нулей и единиц. Это число равно 28, т.е. 256. Если надо закодировать число больше 255, то два байта объединяются вместе и используется 16 битов. Это дает 216, т.е. 65536 комбинаций. Еще большие целые числа можно представить с помощью 4 байтов или 32 битов.
Представление отрицательных чисел в компьютере.
Для представления целого числа со знаком самый старший (левый) бит отводится под знак числа, остальные разряды - под само число. Если число положительное, то в знаковый разряд помещается 0, если отрицательное - 1. Например, в байте можно представить знаковые числа от -128 до 127.
Представление числа в привычной форме "знак"-"величина", при которой старший разряд ячейки отводится под знак, а остальные - под запись числа в двоичной системе, называется прямым кодом двоичного числа.
Например, прямой код двоичных чисел 1001 и -1001 для 8-разрядной ячейки равен 00001001 и 10001001 соответственно.
Прямой код отрицательного числа отличается от прямого кода соответствующего положительного числа лишь содержимым знакового разряда.
Но при такой записи вычисление разности двух чисел представляет собой не простую задачу. Обычно для реализации разности, вычитание заменяется сложением с противоположным числом. К примеру:
A-B=A+(-B)
По определению, B+(-B)=0, т.е. сумма чисел B и -B должна дать 0. Пусть наше число B занимает один байт, т.е. принимает значение от 0 до 255. При этом 255+1=256=0.
Поясним написанное последнее выражение на примере суммы этих чисел в бинарном коде:
11111111
+00000001
---------------
100000000
Получили число 256, но левая единица выходит за разрядность нашего числа, равную 8 и поэтому отбрасывается.
Исходя из выше сказанного, получаем, что B+(-B)=0=256, если B – восьми разрядное число. Значит, нам для того, чтобы получить –B, надо вычесть B из 256.
Пусть B= 5, тогда -B = 256-5=251= 111110112
Теперь вычислим следующее выражение:
10-5=10+(-5)=5
В двоичном коде:
00001010
+11111011
--------------
100000101
Левая «1» отбрасывается, и получаем искомое число 00000101=5
Описанный выше код и используется для кодирования отрицательных чисел в ЭВМ. Он носит названия дополнительный код.
Обобщим всё вышесказанное.
Дополнительный код положительного числа равен прямому коду этого числа.
Дополнительный код отрицательного числа m равен 2n-|m|, где n - количество разрядов в ячейке.
Дополнительный код используется для упрощения выполнения арифметических операций. Если бы вычислительная машина работала с прямыми кодами положительных и отрицательных чисел, то при выполнении арифметических операций следовало бы выполнять ряд дополнительных действий. Например, при сложении нужно было бы проверять знаки обоих операндов и определять знак результата. Если знаки одинаковые, то вычисляется сумма операндов и ей присваивается тот же знак. Если знаки разные, то из большего по абсолютной величине числа вычитается меньшее и результату присваивается знак большего числа. То есть при таком представлении чисел (в виде только прямого кода) операция сложения реализуется через достаточно сложный алгоритм. Если же отрицательные числа представлять в виде дополнительного кода, то операция сложения, в том числе и разного знака, сводится к их поразрядному сложению.
Алгоритм получения дополнительного кода отрицательного числа.
Для получения дополнительного k-разрядного кода отрицательного числа необходимо:
модуль отрицательного числа представить прямым кодом в k- двоичных разрядах;
значение всех бит инвертировать: все нули заменить на единицы, а единицы на нули, таким образом, получается k-разрядный обратный код исходного числа);
к полученному обратному коду прибавить единицу.
Пример:
Получим 8-разрядный дополнительный код числа -52:
00110100 - число |-52|=52 в прямом коде.
11001011 - число -52 в обратном коде
11001100 - число -52 в дополнительном коде.
