Компьютерная арифметика
Сложение и вычитание
Переполнение
Умножение
Поразрядные логические операции
Логическая операция «И» (and, &)
Логическая операция «ИЛИ» (or, |)
Операция «исключающее ИЛИ» (xor, ^)
Битовые логические операции (итог)
Шифрование с помощью xor
Шифрование с помощью xor
Логический сдвиг
Логический сдвиг
Арифметический сдвиг (вправо)
Циклический сдвиг
Пример
Пример
Пример
Конец фильма
Источники иллюстраций
1.92M
Категория: ПрограммированиеПрограммирование

Операции с целыми числами. 10 класс

1. Компьютерная арифметика

1
Компьютерная
арифметика
§ 28. Операции с целыми
числами
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru

2. Сложение и вычитание

Компьютерная арифметика, 10 класс
2
Сложение и вычитание
!
Операции с положительными и отрицательными
числами выполняются по одинаковым алгоритмам!
+ 5
-9
-4
!
+ 0000 0101
1111 0111
1111 1100
Вычитание = сложение с дополнительным кодом
вычитаемого!
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru

3. Переполнение

Компьютерная арифметика, 10 класс
3
Переполнение
дополнительный
бит
!
0 01100000
0 00100001
0 1 0000001
S’ S
знаковый бит
96
33
-127
1 10100000
+
1 11011111
1 0 1111111
S’ S
-96
-33
127
+
Если бит S не совпадает с битом S’,
произошло переполнение и результат неверный.
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru

4. Умножение

Компьютерная арифметика, 10 класс
4
Умножение
× 00001001
9
5
00000101
00001001
+ 00000000
00001001
0000101101 45
!
× 11110111
-9
5
00000101
11110111
+ 00000000
11110111
10011010011 -45
Умножение выполняется с помощью сложения и
сдвига.
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru

5. Поразрядные логические операции

Компьютерная арифметика, 10 класс
5
Поразрядные логические операции
Поразрядные операции выполняются
с отдельными битами числа и не
регистр
влияют на остальные.
?
Сложение – это поразрядная
операция?
Операция «НЕ» (инверсия, not):
R
1
0
0
1
1
0
1
0
not R
0
1
1
0
0
1
0
1
К.Ю. Поляков, Е.А. Ерёмин, 2013
0
1
0
0
1
0
0
0
http://kpolyakov.spb.ru

6. Логическая операция «И» (and, &)

Компьютерная арифметика, 10 класс
6
Логическая операция «И» (and, &)
данные
D
0
1
0
1
!
маска
Маска – константа, которая
определяет область
применения логической
операции к битам
многоразрядного числа.
AA16 and 6C16 = ?
D and M
0
0
0
1
M
0
0
1
1
7
6
5
4
3
2
1
0
D
1
0
1
0
1
0
1
0
AA16
M
0
1
1
0
1
1
0
0
6С16
D and M
0
0
1
0
1
0
0
0
2816
С помощью операции «И» можно сбросить
(установить в ноль) биты, для которых маска равна 0!
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru

7. Логическая операция «ИЛИ» (or, |)

Компьютерная арифметика, 10 класс
7
Логическая операция «ИЛИ» (or, |)
D
0
1
0
1
D or M
0
1
1
1
M
0
0
1
1
AA16 or 6C16 = ?
!
7
6
5
4
3
2
1
0
D
1
0
1
0
1
0
1
0
AA16
M
0
1
1
0
1
1
0
0
6С16
D or M
1
1
1
0
1
1
1
0
EE16
С помощью операции «ИЛИ» можно записать
единицу в биты, для которых маска равна 1!
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru

8. Операция «исключающее ИЛИ» (xor, ^)

Компьютерная арифметика, 10 класс
8
Операция «исключающее ИЛИ» (xor, ^)
D
0
1
0
1
D xor M
0
1
1
0
M
0
0
1
1
AA16 xor 6C16 = ?
!
7
6
5
4
3
2
1
0
D
1
0
1
0
1
0
1
0
AA16
M
0
1
1
0
1
1
0
0
6С16
D xor M
1
1
0
0
0
1
1
0
C616
С помощью операции «исключающее ИЛИ» можно
инвертировать биты, для которых маска равна 1!
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru

9. Битовые логические операции (итог)

Компьютерная арифметика, 10 класс
9
Битовые логические операции (итог)
0
0
0
0
1
1
1
1
7
6
5
4
3
2
1
0
1
0
0
1
R
1
1
1
1
F16
916
6
5
4
3
2
1
0
1
0
0
1
0
0
0
0
016
7
6
5
4
3
2
1
0
0
0
1
1
0
1
0
0
316
R = R and F916
2) включить лампочки 7 и 4
7
916
1) отключить лампочки 2 и 1, не
трогая остальные
R = R or 9016
3) изменить состояние
лампочек 5, 4 и 2
R = R xor 3416
416
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru

10. Шифрование с помощью xor

Компьютерная арифметика, 10 класс
10
Шифрование с помощью xor
Идея: (A xor B) xor B = A
!
Операция «исключающее ИЛИ» обратима, то есть
ее повторное применение восстанавливает исходное
значение!
Текст: 2*2=4
Коды символов:
'2' = 3216 = 001100102
'*' = 2A16 = 001010102
'=' = 3D16 = 001111012
'4' = 3416 = 001101002
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru

11. Шифрование с помощью xor

Компьютерная арифметика, 10 класс
11
Шифрование с помощью xor
Маска: 23 = 1716 = 000101112
'2' 3216 xor 1716 =
'*' 2A16 xor 1716 =
'=' 3D16 xor 1716 =
'4' 3416 xor 1716 =
2516 '%'
3D16 '='
2A16 '*'
2316 '#'
Исходный текст: 2*2=4
Зашифрованный текст: %=%*#
Расшифровка:
'%' 2516 xor 1716 =
'=' 3D16 xor 1716 =
'*' 2A16 xor 1716 =
'#' 2316 xor 1716 =
К.Ю. Поляков, Е.А. Ерёмин, 2013
3216 '2'
2A16 '*'
3D16 '='
3416 '4'
http://kpolyakov.spb.ru

12. Логический сдвиг

Компьютерная арифметика, 10 класс
12
Логический сдвиг
Влево:
бит
переноса
С
1
Вправо:
1 0 0 1 1 0 1 1
0 0 1 1 0 1 1 0
1 0 0 1 1 0 1 1
0
С, C++, Python :
N = N << 1;
N = N >> 1;
0 1 0 0 1 1 0 1
Паскаль:
0
С
1
shift left
N := N shl 1;
N := N shr 1;
shift right
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru

13. Логический сдвиг

Компьютерная арифметика, 10 класс
13
Логический сдвиг
Влево:
0 0 0 0 1 1 0 0
0 0 0 1 1 0 0 0
12
24
0 0 0 0 1 1 0 0
0 0 0 0 0 1 1 0
12
6
Вправо:
?
Если число нечётное?
Логический сдвиг влево (вправо) – это быстрый
способ умножения (деления без остатка)
положительного числа на 2.
?
К.Ю. Поляков, Е.А. Ерёмин, 2013
Если число отрицательное?
http://kpolyakov.spb.ru

14. Арифметический сдвиг (вправо)

Компьютерная арифметика, 10 класс
14
Арифметический сдвиг (вправо)
–12 1 1 1 1 0 1 0 0
–6
?
1 1 1 1 1 0 1 0
С
0
Если число нечётное?
Примеры:
20 10
15 7
–20 –10
–15 –8
11 5
3 1
–11 –6
–3 –2
1 0
–1 –1
К.Ю. Поляков, Е.А. Ерёмин, 2013
Арифметический сдвиг
вправо – деление на 2
нацело с округлением
«вниз» (к ближайшему
меньшему целому).
http://kpolyakov.spb.ru

15. Циклический сдвиг

Компьютерная арифметика, 10 класс
15
Циклический сдвиг
Влево:
1 0 0 1 1 0 1 1
0 0 1 1 0 1 1 1
Вправо:
1 0 0 1 1 0 1 1
1 1 0 0 1 1 0 1
!
Циклический сдвиг предназначен для
последовательного просмотра битов без
потери данных.
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru

16. Пример

Компьютерная арифметика, 10 класс
16
Пример
Задача: в целой переменной N (32 бита) закодирована
информация о цвете пикселя в RGB:
24 23
31
0
16 15
R
87
G
0
B
Записать в переменные R, G, B составляющие цвета.
Вариант 1:
1. Обнулить все биты, кроме G.
Маска для выделения G: 0000FF0016
2. Сдвинуть вправо так, чтобы число G передвинулось в
младший байт.
С, C++, Python: G =(N & 0xFF00) >> 8;
Паскаль: G:=(N and $FF00) shr 8;
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru

17. Пример

Компьютерная арифметика, 10 класс
17
Пример
24 23
31
0
16 15
R
87
G
0
B
Вариант 2:
1. Сдвинуть вправо так, чтобы число G передвинулось в
младший байт.
2. Обнулить все биты, кроме G.
Маска для выделения G: 000000FF16
С, C++, Python: G =(N >> 8) & 0xFF;
Паскаль: G:=(N shr 8) and $FF;
?
Как решить, используя только сдвиги?
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru

18. Пример

Компьютерная арифметика, 10 класс
18
Пример
24 23
31
0
16 15
R
87
G
0
B
Си: R =
B=
Паскаль: R:=
B:=
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru

19. Конец фильма

Компьютерная арифметика, 10 класс
19
Конец фильма
ПОЛЯКОВ Константин Юрьевич
д.т.н., учитель информатики
ГБОУ СОШ № 163, г. Санкт-Петербург
[email protected]
ЕРЕМИН Евгений Александрович
к.ф.-м.н., доцент кафедры мультимедийной
дидактики и ИТО ПГГПУ, г. Пермь
[email protected]
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru

20. Источники иллюстраций

Компьютерная арифметика, 10 класс
20
Источники иллюстраций
1.
авторские материалы
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
English     Русский Правила