Различия
Показаны различия между двумя версиями страницы.
— | pobitovye_ili_porazrjadnye_operacii [2021/07/31 21:58] (текущий) – создано - внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Побитовые или поразрядные операции ====== | ||
+ | * [[Системы исчисления]]: | ||
+ | |||
+ | Операнды поразрядных операций могут быть любого целого типа. | ||
+ | К побитовым, | ||
+ | * операция поразрядного И (побитовое умножение) &; | ||
+ | * операция поразрядного ИЛИ (побитовое сложение) |; | ||
+ | * операция поразрядного исключающего ИЛИ ^; | ||
+ | * унарная операция поразрядного отрицания (дополнение) ~. | ||
+ | |||
+ | Кроме того, рассматриваются операции сдвигов **<<, >>**. | ||
+ | |||
+ | < | ||
+ | < | ||
+ | Значение бита(10 -ая система): | ||
+ | Номер бита: | ||
+ | Значение бита(2 -ая система): | ||
+ | </ | ||
+ | * Проверить, | ||
+ | if (x& | ||
+ | </ | ||
+ | * Стереть бит 2 в четвертой степени. Для этого нужно умножить 10010001 на число 11101111 = 10000001 | ||
+ | * Установить бит | ||
+ | ====== Значение старшего, | ||
+ | * [[wpru> | ||
+ | Запись многобайтового числа из памяти компьютера в файл или передача по сети требует соблюдения соглашений о том, какой из байтов является старшим, | ||
+ | |||
+ | Чтобы получить значение младщего слова (OWORD) | ||
+ | |||
+ | (HIWORD) | ||
+ | |||
+ | |||
+ | * **Старший бит**. Старший бит - это самый левый бит для данной разрядности(x16 - 16-ый, x64 - 64-ый). Если число со знаком, | ||
+ | Считать старшим битом самую левую единицу - ошибочно, | ||
+ | |||
+ | Мы знаем, что считать можно до бесконечности, | ||
+ | |||
+ | В случае знакового представления самый старший бит является знаковым (при условии что мы используем запись в дополнительном коде). И именно этот знаковый бит называют старшим (потому что больше нечего назвать этим термином). Вообще, | ||
+ | ====== Операции ====== | ||
+ | * **Инверсия битов** (поразрядное отрицание, | ||
+ | *** Битовое " | ||
+ | < | ||
+ | 10010011 & 00111101 = 00010001 | ||
+ | </ | ||
+ | * **Битовое " | ||
+ | < | ||
+ | 10010011 | 00111101 = 10111111 | ||
+ | </ | ||
+ | потому что все разряды (кроме шестого) в одном из двух операндов имеют значение 1. | ||
+ | * Битовое исключающее " | ||
+ | < | ||
+ | 10010011 ^ 00111101 = 10101110 | ||
+ | </ | ||
+ | Заметим, | ||
+ | |||
+ | Описанные выше операции часто используются для установки некоторых битов, причем другие биты остаются неизменными. Они удобны для фильтрации или маскирования битов. | ||
+ | |||
+ | * Сдвиг влево сдвигает разряды левого операнда влево на число позиций, | ||
+ | < | ||
+ | 10001010 << 2 = 00101000 , | ||
+ | </ | ||
+ | Таким образом, | ||
+ | |||
+ | Для значений без знака имеем | ||
+ | < | ||
+ | 10001010 | ||
+ | </ | ||
+ | Эти две операции выполняют сдвиг, а также эффективное умножение и деление на степени числа 2. | ||
+ | |||
+ | Пример. | ||
+ | < | ||
+ | #include < | ||
+ | using namespace std; | ||
+ | void main (){ | ||
+ | |||
+ | int y=02, | ||
+ | |||
+ | k = x|y& | ||
+ | cout<< | ||
+ | |||
+ | k = x|y& | ||
+ | cout<< | ||
+ | |||
+ | k = x^y&~z; | ||
+ | cout<< | ||
+ | |||
+ | k = x& | ||
+ | cout<< | ||
+ | |||
+ | x = 1; | ||
+ | y = -1; | ||
+ | |||
+ | k = !x|x; | ||
+ | cout<< | ||
+ | |||
+ | k = -x|x; | ||
+ | cout<< | ||
+ | |||
+ | k = x^x; | ||
+ | cout<< | ||
+ | |||
+ | x <<= 3; | ||
+ | cout<< | ||
+ | |||
+ | y <<= 3; | ||
+ | cout<< | ||
+ | |||
+ | y >>= 3; | ||
+ | cout<< | ||
+ | } | ||
+ | Результат работы программы: | ||
+ | 3 3 1 1 1 -1 0 8 -8 -1 | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | Комментарии к коду. | ||
+ | * Операция 1. | ||
+ | < | ||
+ | x = 03; y = 02; z = 01; | ||
+ | k = x|y&z; | ||
+ | Вследствие приоритетов операций: | ||
+ | k = (x|(02& | ||
+ | 02 & 01 = 00000010 & 00000001 = 00000000 = 0 | ||
+ | k = (x|00); | ||
+ | 03 | 00 = 00000011 | 00000000 = 00000011 = 03 | ||
+ | 03 | ||
+ | </ | ||
+ | * Операция 2. | ||
+ | < | ||
+ | x = 03; y = 02; z = 01; | ||
+ | k = x|y&~z; | ||
+ | k = (x|(y& | ||
+ | |||
+ | | ||
+ | 02 & 11111110 = 000000010 & 11111110 = 000000010 = 02 | ||
+ | 03 | 02 = 00000011 | 000000010 = 00000011 = 03 | ||
+ | 3 | ||
+ | </ | ||
+ | |||
+ | Операции 3. | ||
+ | < | ||
+ | x = 03; y = 02; z = 01; | ||
+ | k = x^y&~z; | ||
+ | |||
+ | k = (03^02); | ||
+ | 1 | ||
+ | </ | ||
+ | |||
+ | |||
+ | Операции 4. | ||
+ | < | ||
+ | x = 03; y = 02; z = 01; | ||
+ | k = x& | ||
+ | |||
+ | k = ((x& | ||
+ | k = ((03& | ||
+ | k = (02&& | ||
+ | k = (true&& | ||
+ | k = (&& | ||
+ | k = (true&& | ||
+ | true или 1 | ||
+ | </ | ||
+ | |||
+ | Операции 5. | ||
+ | < | ||
+ | x = 01; | ||
+ | k = !x|x; | ||
+ | |||
+ | k = ((!x)|x); | ||
+ | k = ((!true)|x); | ||
+ | k = (false|01); | ||
+ | k = (0|01); | ||
+ | 1 | ||
+ | </ | ||
+ | |||
+ | |||
+ | Операции 6. | ||
+ | < | ||
+ | x = 01; | ||
+ | k = -x|x; | ||
+ | |||
+ | k = ((-x)|x); | ||
+ | k = (-01|01); | ||
+ | -01 | 01 = 11111111 | 00000001 = 11111111 = -1 | ||
+ | -1 | ||
+ | </ | ||
+ | < | ||
+ | Операции 7. | ||
+ | x = 01; | ||
+ | k = x^x; | ||
+ | |||
+ | k = (01^01); | ||
+ | 0 | ||
+ | </ | ||
+ | Операции 8. | ||
+ | < | ||
+ | x = 01; | ||
+ | x <<= 3; | ||
+ | |||
+ | x = 01<< | ||
+ | 01 << 3 = 000000001 << 3 = 00001000 = 8 | ||
+ | x = 8; | ||
+ | 8 | ||
+ | </ | ||
+ | Операции 9. | ||
+ | < | ||
+ | y = -01; | ||
+ | y <<= 3; | ||
+ | |||
+ | y = -01<< | ||
+ | -01 << 3 = 11111111 << 3 = 11111000 = -8 | ||
+ | y = -8; | ||
+ | -8 | ||
+ | </ | ||
+ | Операции 10. | ||
+ | < | ||
+ | y = -08; | ||
+ | y >>= 3; | ||
+ | |||
+ | y = -08>> | ||
+ | -1 | ||
+ | </ | ||
+ | < | ||
+ | |||
+ | ====== Побитовые операторы JavaScript ====== | ||
+ | Для понимания побитовых операторов необходимо свободно уметь работать с двоичным представлением чисел. Если это не так, остается только надеяться, | ||
+ | |||
+ | Таблица. Побитовые операторы. | ||
+ | < | ||
+ | Оператор Название Пример Бин. Результат Бин. | ||
+ | & Побитовая операция " | ||
+ | | Побитовая операция " | ||
+ | ~ Побитовая операция " | ||
+ | ^ Побитовая операция " | ||
+ | << Побитовая операция " | ||
+ | >> Побитовая операция " | ||
+ | </ | ||
+ | |||
+ | Принцип работы побитовых операторов достаточно прост: JavaScript рассматривает последовательно каждый бит операндов, | ||
+ | |||
+ | Листинг: | ||
+ | < | ||
+ | var some_number = 105; | ||
+ | var result = (some_number & 1) == 0; | ||
+ | alert (result); | ||
+ | </ | ||
+ | Если в результате получится значение false, то заданное число является нечетным, | ||
+ | |||
📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.
📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Nginx простые примеры конфигурации
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах
7 Самых Популярных Обзоров
- Хостинг для Python-скриптов и приложений
- ТОП 4 лучших антидетект браузеров (Бесплатные & Платные)
- Подборка купонов (промокоды) на хостинг, антидетект браузеры
- Обзор THE.Hosting (PQ Hosting): надежный хостинг с профессиональной поддержкой
- Хостинг в России
- Хостинг в Европе
- Обзор браузера Dolphin {anty} для мультиаккаунтинга