Страницы

Поиск по вопросам

вторник, 31 декабря 2019 г.

Зачем нужны побитовые операторы и что они фактически делают в Си?

#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



Битовые операции.

Комментариев нет:

Отправить комментарий