#c #битовые_операции
Здравствуйте! Объясните, пожалуйста, для чего нужны побитовые операторы и каков принцип их работы? Я уже несколько раз перечитывал главу K&R и читал в сети, но не пойму их. Если можно, с практическими примерами. Спасибо за понимание.
Ответы
Ответ 1
Принцип работы предельно прост: идёт работа с битами целых чисел. Есть, например, число 10, оно в двоичной будет 1010, значит если это int (4 байта, 32 бита), то это будет: 0000 0000 . 0000 0000 . 0000 0000 . 0000 1010 Есть ещё, например, число 7. Оно будет равно: 0000 0000 . 0000 0000 . 0000 0000 . 0000 0111 Можно произвести конъюнкцию 7 & 10, т.е. поставить эти числа друг над другом и провести конъюнкцию каждого бита одного числа с соответствующим ему битом другого числа. Будет: 0000 0000 . 0000 0000 . 0000 0000 . 0000 0010 Такая же логика с "или", т.е. '|' и со "сложением по модулю 2", т.е. "^". В инете куча инфы, разумеется. Можете прочитать ещё про сдвиг (bitwise shift). Используется в комбинаторике, есть много примеров, например в алгоритме генерации множества всех подмножеств (используется и "сдвиг" и "побитовое и"). Или, может быть тоже будет интересно разобраться: бинарный алгоритм нахождения НОДа двух чиселОтвет 2
Как следует из названия они изменяют/проверяют один или несколько бит в машинном представлении целых двоичных (long long, long, int, short, char) чисел. Например для int x; if (x & 1) // нечетное х = (х+7) & ~7; // сделаем его ближайшим большим кратным 8 И т.п. Для понимания этих операций необходимо понимание представления чисел в машинной памяти в битовом представлении. После этого Вы сами придумаете как и когда их применять. Весьма распространено их использование для манипуляции битовыми массивами, где отдельные биты плотно упакованы в массив байт (или слов). Например массив для 8000000 бит будет занимать 1000000 байт памяти.Ответ 3
Битовые операции.
Комментариев нет:
Отправить комментарий