- •Тема 1. Системы счисления.
- •Десятично-двоичное преобразование целых чисел.
- •Перевод чисел из десятичной системы в восьмеричную и в шестнадцатеричную и обратно.
- •Операции над двоичными числами и поразрядные операции.
- •2 Задание. Выполнить предложенные преобразования чисел в различных системах счисления.
Перевод чисел из десятичной системы в восьмеричную и в шестнадцатеричную и обратно.
Пример 1.8. Преобразование шестнадцатеричного числа 2C6F в десятичное (согласно формуле 1.1).
Значениями позиций первых четырех шестнадцатеричных цифр являются соответственно слева направо 4096 (163), 256 (162), 16 (161), 1 (160). Десятичное число содержит 15 (F16) единиц, 6 чисел 16, 12 (С16) чисел 256 (162) и 2 числа 4096 (163). Каждая цифра умножается на соответствующий ей вес, получается сумма, которая и дает десятичное число 11375.
Пример 1.9. Преобразование десятичного числа 15799 в шестнадцатеричное.
15799(10) / 16 = 987 15799 % 16 = 710 = 716 16 0
987 / 16 = 61 987 % 16 = 1110 = B16 16 1
61 / 16 = 3 61 % 16 = 1310 = D16 16 2
3 / 16 = 0 3 % 16 = 310 = 316 16 3
1579910 = 3DB716
Пример 1.10. Запишем восьмеричное число 2357 в десятичной форме.
Веса первых восьмеричных позиций равны 512 (83), 64 (82), 8 (81) и 1 (80). В предлагаемом числе содержится 7 единиц, 5 восьмерок, 4 числа 64 (82) и два числа 521 (83). Для получения результата сложим: 2*521 + 4*64 + 5*8 + 7 = 1263 (в десятичном представлении).
Пример 1.11. Преобразуем десятичное число 2145 в его восьмеричный эквивалент.
2145 / 8 = 268 2145 % 8 = 110 = 18 80
268 / 8 = 33 268 % 8 = 410 = 48 81
33 / 8 = 4 33 % 8 = 110 = 18 82
4 / 8 = 0 4 % 8 = 410 = 48 83
214510 = 41418
Операции над двоичными числами и поразрядные операции.
К логическим операциям относятся:
&& - логическое "И";
|| - логическое "ИЛИ";
! - логическое отрицание.
Логические операции используются в тех случаях, когда необходимо объединить несколько условных выражений.
Пример 1.12. Пусть нужно подтвердить или опровергнуть принадлежность точек заштрихованной области:
bool b;
b = y < exp(x) && y > 0 && x > 2 && x < 5
bool b;
b = (y < exp(x) && y > 0 && x > 0 && x<2) || (x < 0 && x > -2 && y < 0 && y > -2)
Свойства логических операций представлены в таблице 1.2.
Таблица 1.2.
V1 |
V2 |
!V2 |
V1&&V2 |
V1||V2 |
false |
false |
true |
false |
false |
false |
true |
false |
false |
true |
true |
false |
|
false |
true |
true |
true |
true |
true |
Поразрядные операции или операции с разрядами (битами) нельзя применять к переменным типа float и double. К таким операциям относятся:
& - поразрядное "И";
| - поразрядное "ИЛИ";
~ - поразрядная инверсия;
^ - поразрядное "исключающее ИЛИ";
<< - сдвиг влево;
>> - сдвиг вправо.
Поразрядные операции выполняются в соответствии с таблицами истинности (табл.1.3), причем каждый разряд рассматривается независимо от других разрядов.
Таблица 1.3.
x |
y |
~ y |
x & y |
x | y |
x ^ y |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
|
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
Пример 1.13. Обычное (+) и поразрядное (OR) двоичное сложение.
0111001110011010 0111001110011010
+ OR
1100111100100110 1100111100100110
--------------------------- ---------------------------
10100001011000000 1111111110111110
В случае обычного сложения может возникнуть так называемый бит переноса, в случае поразрядного сложения это невозможно.
Пример 1.14. Сдвиги разрядов.
Сдвиг на один бит влево приводит к умножению на 2, на один бит вправо - к целочисленному делению на 2:
00000100 4 (десятичное)
00001000 8 = 4 x 2
00000010 2 = 4 / 2
Пример 1.15. Сменить биты 16-разрядного машинного слова на обратные
1000110001110011
XOR
1111111111111111
--------------------------
0111001110001100
Иногда возникает необходимость анализировать или преобразовывать не все биты слова, а лишь некоторые. Тогда задают маску - слово в котором выделены нужные разряды. Установка битов по маске осуществляется поразрядным сложением (OR), сброс битов по маске - поразрядным умножением (AND).
Пример 1.16. Установить по маске биты в 16-разрядном машинном слове
1001110101110011
OR
1100110011001100 - маска
-------------------------
1101110111111111
Пример 1.17. Сбросить по маске биты в 16-разрядном машинном слове
1110000111101101
AND
1110001110001110 - маска
-------------------------
1110000110001100
Пример 1.18. Проверить наличие 0, 3, 5 битов в 16-разрядном слове
1000110011001100
AND
0000000000101001
-------------------------
0000000000001000
Отрицательные двоичные числа
Представление абсолютной величиной со знаком.
При этом способе крайний левый бит является знаковым битом числа:
0 означает +, а 1 - -. Остальные биты содержат абсолютную величину числа.
0000000000000110 +6
1000000000000110 -6 в представлении числа со знаком.
Представление числа в обратном коде.
Также присутствует знаковый бит: 0 обозначает +
1 - -
0000000000000101 – 5
1111111111111010 - -5 в обратном коде, т.к. здесь для того, чтобы сделать число отрицательным, каждая 1 заменяется на 0 и каждый 0 заменяется на 1. Это правило справедливо также для знакового бита.
Чаще, чем два описанных способа, применяется представление числа в дополнительном коде
Представление числа в дополнительном коде.
Присутствует знаковый бит: 0 обозначает +
1 - -.
Чтобы найти двоичное представление отрицательного числа (т.е. его дополнительный код), надо взять его положительную форму, обратить каждый бит (т.е. заменить 1 на 0, а 0 на 1), а затем добавить к полученному результату 1.
0000000000000100 + 4
1111111111111011 - 4 в обратном коде
-
прибавляем 1
________________
1111111111111100 - 4 в дополнительном коде
Задания для самостоятельной работы.
1 задание. Вычислить результат предложенной операции.
1 |
1010101010101010 AND 1100111000111100 |
2 |
1110011000001101 OR 0001100011000110 |
3 |
1100011011 + 101 |
4 |
1111000110 - 1 |
5 |
1111100000111110 XOR 1100110011001100 |
6 |
NOT 1100001001100110 |
7 |
1111111100000000 XOR 0000111100001111 |
8 |
1011100111001011 AND 1011111000111010 |
9 |
1010101010101010 AND 1110111000110100 |
10 |
1110011000001101 OR 0001100011000110 |
11 |
1100011011 + 101 |
12 |
1111000110 - 1 |
13 |
1111100000111110 XOR 1100110011001100 |
14 |
NOT 1100001001100110 |
15 |
1111111100000000 XOR 0000111100001111 |
16 |
1011100111001011 AND 1011111000111010 |
17 |
1010101010101010 AND 1100111000111100 |
18 |
1110011000001101 OR 0001100011000110 |
19 |
1100011011 + 101 |
20 |
1111000110 - 1 |
21 |
NOT 1100001001100110 |
22 |
1111111100000000 XOR 0000111100001111 |
23 |
1011100111001011 AND 1011111000111010 |
24 |
1100110000110011 XOR 0000111100001111 |
25 |
1011100111001011 AND 1010111000101010 |
26 |
1110011010001101 OR 0001100011010110 |
27 |
1100011001 + 1101 |
28 |
1111000110 - 11 |