ПИФАГОР
(570 – 500 лет до нашей эры)
«ВСЕ ЕСТЬ
ЧИСЛО»
Системы счисления
Системы счисления
Система счисления — это способ
записи (представления) чисел.
Пример систем счисления
Представьте вы видите перед собой
несколько деревьев. Ваша задача — их
посчитать. Для этого можно — загибать
пальцы, делать зарубки на камне (одно
дерево — один палецзарубка) или
сопоставить 10 деревьям какой-нибудь
предмет, например, камень, а
единичному экземпляру — палочку и
выкладывать их на землю по мере
подсчёта.
Двенадцатеричная система счисления
Широкое применение до XX века имела
двенадцатеричная система счисления, которую мы до
сих пор можем увидеть в часах, календарных месяцах и
т.д.
В её основе лежит счёт фаланг палецев.
Современные системы счисления
Десятичная система счисления
Появилась впервые в VII веке нашей эры.
Используются арабские цифры. Основана на
количестве пальцев на руках.
Двоичная система счисления
Эта система, в основном, используется
в вычислительной
технике.
Она была создана за
долго до изобретения вычислительных
машин и уходит “корнями” в цивилизацию
Инков, где использовались кипу — сложные
верёвочные сплетения и узелки.
Двоичная система счисления
Двоичная система
00001011
Двоичная (позиционная) система
счисления имеет основание 2 и
использует для записи числа 2 символа
(цифры): 0 и 1.
В каждом разряде допустима только
одна цифра — либо 0, либо 1.
Двоичная система
Двоичная система
Примером может служить число 101.
Оно аналогично числу 5 в десятичной
системе счисления. Для того, чтобы
перевести из 2-й в 10-ю необходимо
умножить каждую цифру двоичного
числа на основание “2”, возведённое в
степень, равную разряду. Таким
образом, число 1012 = 1*22
+ 0*21
+
1*20
= 4+0+1 = 510.
Перевод числа из десятичнй в
двоичную систему исчесления.
Делим десятичное число
на два до тех пор, пока
не получим неделимый
на два остаток. На
каждом шаге деления
получим остаток 1 (если
делимое число было
нечётным) или 0 (если
делимое делится на два
без остатка). Все эти
остатки обязательно
должны быть учтены.
Двоичная система
Компьютеры используют двоичную
систему так как она имеет ряд
преимуществ перед другими
системами:
для ее реализации нужны
технические устройства с двумя
устойчивыми состояниями (есть ток —
нет тока, намагничен — не намагничен
и т.п.), а не, например, с десятью, —
как в десятичной;
Двоичная система
представление информации посредством
только двух состояний надежно и
помехоустойчиво;
возможно применение аппарата булевой
алгебры для выполнения логических
преобразований информации;
 двоичная арифметика намного проще
десятичной.
Недостаток двоичной системы — быстрый
рост числа разрядов, необходимых для
записи чисел.
Восьмеричная система счисления
8-я система счисления, как и двоичная,
часто применяется в цифровой технике.
Имеет основание 8 и использует для
записи числа цифры от 0 до 7.
Пример восьмеричного числа: 254. Для
перевода в 10-ю систему необходимо каждый
разряд исходного числа умножить на 8n
, где n
— это номер разряда. Получается, что 2548 =
2*82
+ 5*81
+ 4*80
= 128+40+4 = 17210.
Восьмеричная система счисления
Характеризуется лёгким
переводом восьмеричных чисел в
двоичные и обратно, путём
замены восьмеричных чисел на
триплеты двоичных. Широко
использовалась в
программировании и
компьютерной документации,
однако позднее была почти
полностью вытеснена
шестнадцатеричной.
08
= 0002
18
= 0012
28
= 0102
38
= 0112
48
= 1002
58
= 1012
68
= 1102
78
= 1112
Шестнадцатеричная система счисления
Шестнадцатеричная система широко
используется в современных
компьютерах, например при помощи
неё указывается цвет: #FFFFFF —
белый цвет. Рассматриваемая система
имеет основание 16 и использует для
записи числа: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A,
B, C, D, E, F, где буквы равны 10, 11, 12,
13, 14, 15 соответственно.
Шестнадцатеричная система счисления
Шестнадцате
ричная
Двоичная
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
Шестнадцатери
чная
Двоичная
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111
Пример: 0xA29F =
1010001010011111
Шестнадцатеричная система счисления
Широко используется в низкоуровневом
программировании и компьютерной
документации, поскольку в
современных компьютерах
минимальной единицей памяти
является 8-битный байт, значения
которого удобно записывать двумя
шестнадцатеричными цифрами/
Например 0xFF.
Дополнительный код (представление
числа)
Дополнительный код (англ. two’s
complement) — наиболее
распространённый способ
представления отрицательных целых
чисел в компьютерах. Он позволяет
заменить операцию вычитания на
операцию сложения и сделать
операции сложения и вычитания
одинаковыми для знаковых и без
знаковых чисел.
Дополнительный код (представление
числа)
Дополнительный код
отрицательного числа можно
получить инвертированием модуля
двоичного числа (первое
дополнение) и прибавлением к
инверсии единицы (второе
дополнение), либо вычитанием
числа из нуля.
Преобразование в дополнительный код
 Если число, записанное в прямом коде,
положительное, то к нему дописывается
старший (знаковый) разряд, равный 0, и на
этом преобразование заканчивается;
 Если число, записанное в прямом коде,
отрицательное, то все разряды числа
инвертируются, а к результату прибавляется
1. К получившемуся числу дописывается
старший (знаковый) разряд, равный 1.
Побитовые операции
Битовые (поразрядные) операции
применяются для быстрого выполнения
вычислений и меньшего потребления
ресурсов, связанных с этими
вычислениями.
Битовые операции
Битовые операции изучаются в
дискретной математике, а также лежат
в основе цифровой техники, так как на
них основана логика работы логических
вентилей — базовых элементов
цифровых схем.
Побитовые операции
Побитовые операции могут
оперировать только целыми
значениями.
Побитовые операции с вещественными
типами не поддерживаются!
Побитовые операции
| ИЛИ (OR)
& И (AND)
Операции побитового сдвига
<< сдвиг влево
>> сдвиг вправо
Побитовое ИЛИ (OR)
Выставляет значение в 1, если
установлен соответствующий бит в
первой или во второй
последовательности, или вместе
00000000 01111011 (123) |
00000001 11001000 (456)
=
00000001 11111011 (507)
Побитовое И (AND)
Обозначается символом &
Выставляет значение в 1, если установлены
соответствующие биты в первой и второй
последовательности одновременно
00000000 01111011 (123)
&
00000001 11001000 (456)
=
00000000 01001000 (57)
ИСКЛЮЧАЮЩЕЕ ИЛИ (XOR)
Обозначается символом ^
Выставляет значение в 1, если установлен
соответствующий бит или в первой или во
второй во второй последовательности, но не
одновременно.
Если используется более двух
последовательностей, то в результате будет
единица тогда, когда общее количество
единиц соответствующей позиции нечётное
Пример XOR
00000000 01111011 (123)
^
00000001 11001000 (456)
=
00000001 10110011 (435)
ПОБИТОВОЕ ОТРИЦАНИЕ (NOT)
Обозначается символом ~
Унарный операторы. Превращает каждый бит
в противоположный.
~
00000000 01111011 (123)
=
11111111 10000100 (-124)
Знаковый оператор сдвига влево <<
Все биты смещаются влево. Число справа
дополняется нулём Операция используется для
быстрого умножения на 2. Если оператор
применяется к числу, умножение на 2 которого будет
больше максимального значения int (2147483647), то
в результате будет отрицательное число. Это
происходит потому, что крайний левый бит, который
отвечает за знак числа, выставляется в единицу, что
соответствует отрицательным числам.
11111111 11111111 11111111 10000101 (-123) <<
11111111 11111111 11111111 00001010 (-246)
Знаковый оператор сдвига вправо >>
Все биты смещаются вправо. Число слева
дополняется нулём, если число
положительное и единицей, если
отрицательное. Операция используется для
быстрого деления на 2. Если делится
нечётное число, то остаток отбрасывается
для положительных чисел и сохраняется для
отрицательных.
11111111 11111111 11111111 10000101 (-123)
>> 11111111 11111111 11111111 11000010 (-
62)
Без знаковый оператор сдвига >>>
Все биты смещаются вправо, число слева
дополняется нулём, даже если операция
выполняется с отрицательными числами. Отсюда и
название оператора — без знаковый. В результате
применения оператора всегда получается
положительное число. Операция так же, как и
знаковый оператор сдвига вправо, соответствует
делению числа на два за исключением первого
сдвига в отрицательном числе.
11111111 11111111 11111111 10000101 (-123) >>>
01111111 11111111 11111111 11000010 (2147483586)
Когда количество сдвигов превышает
количество разрядов
При использовании битовых сдвигов важно помнить,
что когда количество сдвигов достигает количества
разрядов, следующий сдвиг вернёт значение в
исходное положение. Например, сдвиг влево:
0 - 00000000000000000000000001111011 (123)
1 - 00000000000000000000000011110110 (246)
...
30 - 11000000000000000000000000000000 (-
1073741824)
31 - 10000000000000000000000000000000 (-
2147483648)
32 - 00000000000000000000000001111011 (123)
Некоторые побитовые операторы
похожи на логические операторы (&, |, ^,
&&, ||), с которыми вы уже знакомы. Это
связано, с тем что они выполняют
одинаковые функции, но так как
операнды и результат совершенно
разные, путать их ни в коем случае
нельзя.
Побитовые операторы и логические
операторы
Приведение чисел к
соответствующему типу данных
При использовании побитовых
операций с типами данных byte/short,
числа сначала приводятся к типу int, а
если одно из чисел — long, то к long.
При сужении типа данных, левая часть
битов просто отбрасывается.
Использование маски
Одним из приёмов работы с
битовыми данными является
использование маски. Маска
позволяет получать значения
только определённых битов в
последовательности.
Использование маски
Например, у нас есть маска 00100100,
она позволяет нам получать из
последовательности только те биты,
которые в ней установлены. В данном
случае это 3-й и 7-й разряд. Для этого
достаточно выполнить побитовое И с
нашей маской и неким числом:
01010101 & 00100100 = 00000100
Хранение в одной целочисленной
переменной нескольких значений
При помощи битовых сдвигов можно хранить
в одной целочисленной переменной
несколько значений меньшей длины.
Например, в первых нескольких битах можно
хранить одно число, в следующих битах —
другое. Требуется только знать, на сколько
бит выполняется сдвиг и сколько бит
занимает хранимое число. Для записи
используется логическое ИЛИ, для получения
— И.
Обмен переменных местами без
использования временной переменной
Исключающее ИЛИ может быть использовано
для обмена двух переменных без создания
временной переменной:
void xorSwap(int x, int y) {
x = x^y;
y = y^x;
x = x^y;
}
Работа с правами доступа
Принцип следующий. Имеется
последовательность из трёх битов, где:
001 — первый бит отвечает за права на
выполнение
010 — второй — запись
100 — третий — чтение
Работа с правами доступа
Имеем следующие константы.
final int EXECUTE = 1; //001
final int WRITE = 2; //010
final int READ = 4; //100
Работа с правами доступа
Допустим, нам требуется дать
пользователю полный доступ к ресурсу.
Для этого должен быть выставлен
каждый бит:
int usersAccess = EXECUTE | WRITE | READ;
//Получили значение 7 (111)
Работа с правами доступа
А теперь, допустим, что нам надо
забрать у пользователя права на
выполнение:
usersAccess = usersAccess ^ EXECUTE;
//Получили значение 6 (110)
Быстрое умножение и деление
Операции сдвига рекомендуют
использовать для быстрого умножения
и деления целых чисел на числа,
равные степени двойки. Например,
выражение 3 << 4 соответствует
умножению тройки на 2 в 4-й степени.
Шифр Вернама
На основе
исключающего
ИЛИ работает
шифр Вернама,
для которого
была доказана абсолютная
криптографическая стойкость. Шифр был
«взломан» в фильме «Пароль «Рыба-меч»»

More Related Content

PDF
Arsitektur byzantine
PDF
19th Century Theory of Architectre
PPTX
Asian Architecture Presentation Slides
PPTX
The location of using vertical garden
PDF
Lodha’s palava city thane, mumbai
PPTX
Ancient planning - critical regionalism
DOCX
ken_yeang (1).docx
PDF
Arsitektur byzantine
19th Century Theory of Architectre
Asian Architecture Presentation Slides
The location of using vertical garden
Lodha’s palava city thane, mumbai
Ancient planning - critical regionalism
ken_yeang (1).docx

What's hot (20)

PPTX
Sirkulasi
PDF
Perkembangan arsitektur masjid
PPT
GreenStudio - Chapter 4 2 7 Shading Devices
PPTX
Landscaping details
PDF
Noise Control Stratagies in Reinforced Concrete Buildings
PDF
Asian architecture final
PDF
Solaris Singapore report
DOCX
Gedung tertinggi di makassar
PPTX
HISTORY: Early Christian Architecture
DOCX
211568575 konstruksi-rumah-joglo
PPTX
Sistem pembuangan air (utilitas)
PDF
Contemporary architecture of india
PPTX
Bundled Tube Structural System
PDF
URBAN DESIGN 9TH SEM.pdf
PPT
Interdependence in architecture
PPTX
Building Services- Ventilation
PDF
geothermal energy linked hybrid
PPTX
A look at Neo-Gothic
PPTX
composite climate PPT and some examples
PPTX
Long Span Building Construction
Sirkulasi
Perkembangan arsitektur masjid
GreenStudio - Chapter 4 2 7 Shading Devices
Landscaping details
Noise Control Stratagies in Reinforced Concrete Buildings
Asian architecture final
Solaris Singapore report
Gedung tertinggi di makassar
HISTORY: Early Christian Architecture
211568575 konstruksi-rumah-joglo
Sistem pembuangan air (utilitas)
Contemporary architecture of india
Bundled Tube Structural System
URBAN DESIGN 9TH SEM.pdf
Interdependence in architecture
Building Services- Ventilation
geothermal energy linked hybrid
A look at Neo-Gothic
composite climate PPT and some examples
Long Span Building Construction
Ad

Viewers also liked (20)

PPT
List - списки
PPT
Java. Интерфейс Map - ассоциативные массивы.
PPT
Java. Полиморфизм.
PPT
Java. Интерфейс Reference - типы ссылок
PPT
Java. Циклы.
PPT
Java. Строки. Класс String.
PPT
Java. Инкапсуляция.
PPT
An Introduction to JVM Internals and Garbage Collection in Java
PPT
Java. Логические операторы, операторы ветвления.
PPT
Java. Generic - шаблонные типы.
PPT
Алгоритмы поиска и сортировки
PPT
Java. Интерфейс Queue - очередь
PPT
Java. Массивы. Многомерные массивы.
PPT
Java. Вложенные классы и интерфейсы.
PPT
Исключения и ошибки
PPT
Java. Методы
PPT
Java. Наследование.
PPT
Java. Введение в коллекции. Классы обертки. Перечисленияю
PPT
Java. Конструкторы класса и инициализация
List - списки
Java. Интерфейс Map - ассоциативные массивы.
Java. Полиморфизм.
Java. Интерфейс Reference - типы ссылок
Java. Циклы.
Java. Строки. Класс String.
Java. Инкапсуляция.
An Introduction to JVM Internals and Garbage Collection in Java
Java. Логические операторы, операторы ветвления.
Java. Generic - шаблонные типы.
Алгоритмы поиска и сортировки
Java. Интерфейс Queue - очередь
Java. Массивы. Многомерные массивы.
Java. Вложенные классы и интерфейсы.
Исключения и ошибки
Java. Методы
Java. Наследование.
Java. Введение в коллекции. Классы обертки. Перечисленияю
Java. Конструкторы класса и инициализация
Ad

Similar to Java. Cистемы счислния, битовые операции (20)

PDF
система счисления
DOC
05
DOC
8
PPTX
Sistemy schisleniya munchesku
PPT
651650.ppt651650.ppt651650.ppt651650.ppt651650.ppt
PPT
системы счисления
DOCX
лекция 3.docx
PPTX
представление чисел в компьютере
PPT
системы счиление
DOCX
пр 3 перевод чисел.docx
PPT
системы счисления
PPT
системы счисления
PPT
Тема Системы счисления
PPT
лекция 4 системы счисления информатика
PPT
Системы счисления
PPT
9 1.1 - системы счисления
DOC
03
PPT
лекция 8 арифметические операции информатика
PPT
лекция 8 арифметические операции информатика
PPTX
системы счисления Усков
система счисления
05
8
Sistemy schisleniya munchesku
651650.ppt651650.ppt651650.ppt651650.ppt651650.ppt
системы счисления
лекция 3.docx
представление чисел в компьютере
системы счиление
пр 3 перевод чисел.docx
системы счисления
системы счисления
Тема Системы счисления
лекция 4 системы счисления информатика
Системы счисления
9 1.1 - системы счисления
03
лекция 8 арифметические операции информатика
лекция 8 арифметические операции информатика
системы счисления Усков

More from Unguryan Vitaliy (20)

PPT
Модульное тестирование.
PPT
Stream API
PPT
Архитектурный шаблон MVC
PPT
Работа в команде, управление программными проектами
PPT
Системы контроля версий
PPT
Принципы SOLID
PPT
Парадигма объектно-ориентированного программирования.
PPT
Введение в язык программирования «Java»
PDF
Шаблоны проектирования GoF
PPT
Ввведение в java
PPT
Введение в hibernate
PPT
Spring AOP
PPT
Введение в Spring
PPT
Cookies, session и другое в JSP
PPT
Сервлеты
PPT
Сетевое взаимодействие
PPT
Введение в сетевые технологии
Модульное тестирование.
Stream API
Архитектурный шаблон MVC
Работа в команде, управление программными проектами
Системы контроля версий
Принципы SOLID
Парадигма объектно-ориентированного программирования.
Введение в язык программирования «Java»
Шаблоны проектирования GoF
Ввведение в java
Введение в hibernate
Spring AOP
Введение в Spring
Cookies, session и другое в JSP
Сервлеты
Сетевое взаимодействие
Введение в сетевые технологии

Java. Cистемы счислния, битовые операции

  • 1. ПИФАГОР (570 – 500 лет до нашей эры) «ВСЕ ЕСТЬ ЧИСЛО» Системы счисления
  • 2. Системы счисления Система счисления — это способ записи (представления) чисел.
  • 3. Пример систем счисления Представьте вы видите перед собой несколько деревьев. Ваша задача — их посчитать. Для этого можно — загибать пальцы, делать зарубки на камне (одно дерево — один палецзарубка) или сопоставить 10 деревьям какой-нибудь предмет, например, камень, а единичному экземпляру — палочку и выкладывать их на землю по мере подсчёта.
  • 4. Двенадцатеричная система счисления Широкое применение до XX века имела двенадцатеричная система счисления, которую мы до сих пор можем увидеть в часах, календарных месяцах и т.д. В её основе лежит счёт фаланг палецев.
  • 6. Десятичная система счисления Появилась впервые в VII веке нашей эры. Используются арабские цифры. Основана на количестве пальцев на руках.
  • 7. Двоичная система счисления Эта система, в основном, используется в вычислительной технике. Она была создана за долго до изобретения вычислительных машин и уходит “корнями” в цивилизацию Инков, где использовались кипу — сложные верёвочные сплетения и узелки.
  • 9. Двоичная система 00001011 Двоичная (позиционная) система счисления имеет основание 2 и использует для записи числа 2 символа (цифры): 0 и 1. В каждом разряде допустима только одна цифра — либо 0, либо 1.
  • 11. Двоичная система Примером может служить число 101. Оно аналогично числу 5 в десятичной системе счисления. Для того, чтобы перевести из 2-й в 10-ю необходимо умножить каждую цифру двоичного числа на основание “2”, возведённое в степень, равную разряду. Таким образом, число 1012 = 1*22 + 0*21 + 1*20 = 4+0+1 = 510.
  • 12. Перевод числа из десятичнй в двоичную систему исчесления. Делим десятичное число на два до тех пор, пока не получим неделимый на два остаток. На каждом шаге деления получим остаток 1 (если делимое число было нечётным) или 0 (если делимое делится на два без остатка). Все эти остатки обязательно должны быть учтены.
  • 13. Двоичная система Компьютеры используют двоичную систему так как она имеет ряд преимуществ перед другими системами: для ее реализации нужны технические устройства с двумя устойчивыми состояниями (есть ток — нет тока, намагничен — не намагничен и т.п.), а не, например, с десятью, — как в десятичной;
  • 14. Двоичная система представление информации посредством только двух состояний надежно и помехоустойчиво; возможно применение аппарата булевой алгебры для выполнения логических преобразований информации;  двоичная арифметика намного проще десятичной. Недостаток двоичной системы — быстрый рост числа разрядов, необходимых для записи чисел.
  • 15. Восьмеричная система счисления 8-я система счисления, как и двоичная, часто применяется в цифровой технике. Имеет основание 8 и использует для записи числа цифры от 0 до 7. Пример восьмеричного числа: 254. Для перевода в 10-ю систему необходимо каждый разряд исходного числа умножить на 8n , где n — это номер разряда. Получается, что 2548 = 2*82 + 5*81 + 4*80 = 128+40+4 = 17210.
  • 16. Восьмеричная система счисления Характеризуется лёгким переводом восьмеричных чисел в двоичные и обратно, путём замены восьмеричных чисел на триплеты двоичных. Широко использовалась в программировании и компьютерной документации, однако позднее была почти полностью вытеснена шестнадцатеричной. 08 = 0002 18 = 0012 28 = 0102 38 = 0112 48 = 1002 58 = 1012 68 = 1102 78 = 1112
  • 17. Шестнадцатеричная система счисления Шестнадцатеричная система широко используется в современных компьютерах, например при помощи неё указывается цвет: #FFFFFF — белый цвет. Рассматриваемая система имеет основание 16 и использует для записи числа: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, где буквы равны 10, 11, 12, 13, 14, 15 соответственно.
  • 18. Шестнадцатеричная система счисления Шестнадцате ричная Двоичная 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 Шестнадцатери чная Двоичная A 1010 B 1011 C 1100 D 1101 E 1110 F 1111 Пример: 0xA29F = 1010001010011111
  • 19. Шестнадцатеричная система счисления Широко используется в низкоуровневом программировании и компьютерной документации, поскольку в современных компьютерах минимальной единицей памяти является 8-битный байт, значения которого удобно записывать двумя шестнадцатеричными цифрами/ Например 0xFF.
  • 20. Дополнительный код (представление числа) Дополнительный код (англ. two’s complement) — наиболее распространённый способ представления отрицательных целых чисел в компьютерах. Он позволяет заменить операцию вычитания на операцию сложения и сделать операции сложения и вычитания одинаковыми для знаковых и без знаковых чисел.
  • 21. Дополнительный код (представление числа) Дополнительный код отрицательного числа можно получить инвертированием модуля двоичного числа (первое дополнение) и прибавлением к инверсии единицы (второе дополнение), либо вычитанием числа из нуля.
  • 22. Преобразование в дополнительный код  Если число, записанное в прямом коде, положительное, то к нему дописывается старший (знаковый) разряд, равный 0, и на этом преобразование заканчивается;  Если число, записанное в прямом коде, отрицательное, то все разряды числа инвертируются, а к результату прибавляется 1. К получившемуся числу дописывается старший (знаковый) разряд, равный 1.
  • 23. Побитовые операции Битовые (поразрядные) операции применяются для быстрого выполнения вычислений и меньшего потребления ресурсов, связанных с этими вычислениями.
  • 24. Битовые операции Битовые операции изучаются в дискретной математике, а также лежат в основе цифровой техники, так как на них основана логика работы логических вентилей — базовых элементов цифровых схем.
  • 25. Побитовые операции Побитовые операции могут оперировать только целыми значениями. Побитовые операции с вещественными типами не поддерживаются!
  • 27. Операции побитового сдвига << сдвиг влево >> сдвиг вправо
  • 28. Побитовое ИЛИ (OR) Выставляет значение в 1, если установлен соответствующий бит в первой или во второй последовательности, или вместе 00000000 01111011 (123) | 00000001 11001000 (456) = 00000001 11111011 (507)
  • 29. Побитовое И (AND) Обозначается символом & Выставляет значение в 1, если установлены соответствующие биты в первой и второй последовательности одновременно 00000000 01111011 (123) & 00000001 11001000 (456) = 00000000 01001000 (57)
  • 30. ИСКЛЮЧАЮЩЕЕ ИЛИ (XOR) Обозначается символом ^ Выставляет значение в 1, если установлен соответствующий бит или в первой или во второй во второй последовательности, но не одновременно. Если используется более двух последовательностей, то в результате будет единица тогда, когда общее количество единиц соответствующей позиции нечётное
  • 31. Пример XOR 00000000 01111011 (123) ^ 00000001 11001000 (456) = 00000001 10110011 (435)
  • 32. ПОБИТОВОЕ ОТРИЦАНИЕ (NOT) Обозначается символом ~ Унарный операторы. Превращает каждый бит в противоположный. ~ 00000000 01111011 (123) = 11111111 10000100 (-124)
  • 33. Знаковый оператор сдвига влево << Все биты смещаются влево. Число справа дополняется нулём Операция используется для быстрого умножения на 2. Если оператор применяется к числу, умножение на 2 которого будет больше максимального значения int (2147483647), то в результате будет отрицательное число. Это происходит потому, что крайний левый бит, который отвечает за знак числа, выставляется в единицу, что соответствует отрицательным числам. 11111111 11111111 11111111 10000101 (-123) << 11111111 11111111 11111111 00001010 (-246)
  • 34. Знаковый оператор сдвига вправо >> Все биты смещаются вправо. Число слева дополняется нулём, если число положительное и единицей, если отрицательное. Операция используется для быстрого деления на 2. Если делится нечётное число, то остаток отбрасывается для положительных чисел и сохраняется для отрицательных. 11111111 11111111 11111111 10000101 (-123) >> 11111111 11111111 11111111 11000010 (- 62)
  • 35. Без знаковый оператор сдвига >>> Все биты смещаются вправо, число слева дополняется нулём, даже если операция выполняется с отрицательными числами. Отсюда и название оператора — без знаковый. В результате применения оператора всегда получается положительное число. Операция так же, как и знаковый оператор сдвига вправо, соответствует делению числа на два за исключением первого сдвига в отрицательном числе. 11111111 11111111 11111111 10000101 (-123) >>> 01111111 11111111 11111111 11000010 (2147483586)
  • 36. Когда количество сдвигов превышает количество разрядов При использовании битовых сдвигов важно помнить, что когда количество сдвигов достигает количества разрядов, следующий сдвиг вернёт значение в исходное положение. Например, сдвиг влево: 0 - 00000000000000000000000001111011 (123) 1 - 00000000000000000000000011110110 (246) ... 30 - 11000000000000000000000000000000 (- 1073741824) 31 - 10000000000000000000000000000000 (- 2147483648) 32 - 00000000000000000000000001111011 (123)
  • 37. Некоторые побитовые операторы похожи на логические операторы (&, |, ^, &&, ||), с которыми вы уже знакомы. Это связано, с тем что они выполняют одинаковые функции, но так как операнды и результат совершенно разные, путать их ни в коем случае нельзя. Побитовые операторы и логические операторы
  • 38. Приведение чисел к соответствующему типу данных При использовании побитовых операций с типами данных byte/short, числа сначала приводятся к типу int, а если одно из чисел — long, то к long. При сужении типа данных, левая часть битов просто отбрасывается.
  • 39. Использование маски Одним из приёмов работы с битовыми данными является использование маски. Маска позволяет получать значения только определённых битов в последовательности.
  • 40. Использование маски Например, у нас есть маска 00100100, она позволяет нам получать из последовательности только те биты, которые в ней установлены. В данном случае это 3-й и 7-й разряд. Для этого достаточно выполнить побитовое И с нашей маской и неким числом: 01010101 & 00100100 = 00000100
  • 41. Хранение в одной целочисленной переменной нескольких значений При помощи битовых сдвигов можно хранить в одной целочисленной переменной несколько значений меньшей длины. Например, в первых нескольких битах можно хранить одно число, в следующих битах — другое. Требуется только знать, на сколько бит выполняется сдвиг и сколько бит занимает хранимое число. Для записи используется логическое ИЛИ, для получения — И.
  • 42. Обмен переменных местами без использования временной переменной Исключающее ИЛИ может быть использовано для обмена двух переменных без создания временной переменной: void xorSwap(int x, int y) { x = x^y; y = y^x; x = x^y; }
  • 43. Работа с правами доступа Принцип следующий. Имеется последовательность из трёх битов, где: 001 — первый бит отвечает за права на выполнение 010 — второй — запись 100 — третий — чтение
  • 44. Работа с правами доступа Имеем следующие константы. final int EXECUTE = 1; //001 final int WRITE = 2; //010 final int READ = 4; //100
  • 45. Работа с правами доступа Допустим, нам требуется дать пользователю полный доступ к ресурсу. Для этого должен быть выставлен каждый бит: int usersAccess = EXECUTE | WRITE | READ; //Получили значение 7 (111)
  • 46. Работа с правами доступа А теперь, допустим, что нам надо забрать у пользователя права на выполнение: usersAccess = usersAccess ^ EXECUTE; //Получили значение 6 (110)
  • 47. Быстрое умножение и деление Операции сдвига рекомендуют использовать для быстрого умножения и деления целых чисел на числа, равные степени двойки. Например, выражение 3 << 4 соответствует умножению тройки на 2 в 4-й степени.
  • 48. Шифр Вернама На основе исключающего ИЛИ работает шифр Вернама, для которого была доказана абсолютная криптографическая стойкость. Шифр был «взломан» в фильме «Пароль «Рыба-меч»»