Планета гаджетов / технологий
Содержание
Нашли и оформили подборку различных хитрых приёмов с битовыми операциями. С основами битовых операций также можно ознакомиться в нашей статье. Если вы знаете какие-то трюки, которые не вошли в этот список, делитесь ими в комментариях!
Установка n-ого бита
Обнуление n-ого бита
Переключение n-ого бита
Округление до следующей степени двойки
unsigned int v; //only works if v is 32 bit |
Получение максимального целого
int maxInt = (1 << 31) — 1; int maxInt = (1 << —1) — 1; |
Получение минимального целого
Получение макисмального long
long maxLong = ((long)1 << 127) — 1; |
Умножение на 2
Деление на 2
Умножение на m-тую степень 2
Деление на m-тую степень 2
Проверка на равенство
На 35% быстрее, чем JS ?
Проверка на чётность
Обмен значениями
Модуль
(x ^ (x >> 31)) — (x >> 31); |
Максимум двух чисел
b & ((a—b) >> 31) | a & (~(a—b) >> 31); |
Минимум двух чисел
a & ((a—b) >> 31) | b & (~(a—b) >> 31); |
Проверка на одинаковый знак
Смена знака
i = (i ^ —1) + 1; // i = -i |
Вычисление 2^n
Проверка на степень 2
n > 0 && (n & (n — 1)) == 0; |
Остаток от деления 2^n на m
Среднее арифметическое
((x ^ y) >> 1) + (x & y); |
Получение m-ого бита n (справа налево)
Установка m-ого бита n (справа налево)
Проверка n-ого бита
Выделение самой правой 1
Выделение самого правого 0
Смена самого правого 0 на 1
n+1
n-1
if (x==a) x=b; if (x==b) x=a;
Преобразование буквы в строчную
Result is always lowercase even if letter is already lowercase eg. (‘a’ | ‘ ‘) => ‘a’ ; (‘A’ | ‘ ‘) => ‘a’ |
Преобразование буквы в заглавную
AND by underline => (x & ‘_’) Result is always uppercase even if letter is already uppercase eg. (‘a’ & ‘_’) => ‘A’ ; (‘A’ & ‘_’) => ‘A’ |
Смена вида буквы
XOR by space => (x ^ ‘ ‘) eg. (‘a’ ^ ‘ ‘) => ‘A’ ; (‘A’ ^ ‘ ‘) => ‘a’ |
Номер буквы в алфавите
AND by chr(31)/binary(‘11111’)/(hex(‘1F’) => (x & «\x1F») Result is in 1..26 range, letter case is not important eg. (‘a’ & «\x1F») => 1 ; (‘B’ & «\x1F») => 2 |
Номер заглавной буквы в алфавите
AND by ? => (x & ‘?’) or XOR by @ => (x ^ ‘@’) eg. (‘C’ & ‘?’) => 3 ; (‘Z’ ^ ‘@’) => 26 |
Номер строчной буквы в алфавите
XOR by backtick/chr(96)/binary(‘1100000’)/hex(’60’) => (x ^ ‘`’) eg. (‘d’ ^ ‘`’) => 4 ; (‘x’ ^ ‘`’) => 25 |
Быстрая смена цвета с R5G5B5 на R8G8B8
R8 = (R5 << 3) | (R5 >> 2) G8 = (R5 << 3) | (R5 >> 2) B8 = (R5 << 3) | (R5 >> 2) |
Примечание: можно использовать только латиницу.
По материалам awesome-bitsИван Бирюков, страж правописания