Автор Лена зызина задал вопрос в разделе Другие языки и технологии
с++ зачем нужны побитовые операции если есть обычные логические операторы? и получил лучший ответ
Ответ от Павел[гуру]
Логические операторы работают над типом bool. А он - это всего 2 значения (1 бит).
Ответ от Лайт Ягами[гуру]
Побитовые работают с каждым битом числа по-отдельности, а для логических - всё число целиком либо равно нулю (ложь), либо не равно (истина).
Побитовые работают с каждым битом числа по-отдельности, а для логических - всё число целиком либо равно нулю (ложь), либо не равно (истина).
Ответ от Kaiu[гуру]
Лучше бы еще поняли, что здесь значит bitset<8>
Иногда эти 2 значения хранять допусть есть или нет, включено или выключено.
Так этим битсетом можно задать и не 8, а определенное кол. и хранить.
Хотя для компактного хранения таких состояний достаточно было и char использовать
Тогда
char a = 0; // все биты сброшены
a += 1; //установит 1 бит
a -= 1; // сбросит
Но если установлены и другие биты, то придется битовой операцией устанавливать и сбрасывать
a = a | 0x1;
a = a & 0xFE;
Лучше бы еще поняли, что здесь значит bitset<8>
Иногда эти 2 значения хранять допусть есть или нет, включено или выключено.
Так этим битсетом можно задать и не 8, а определенное кол. и хранить.
Хотя для компактного хранения таких состояний достаточно было и char использовать
Тогда
char a = 0; // все биты сброшены
a += 1; //установит 1 бит
a -= 1; // сбросит
Но если установлены и другие биты, то придется битовой операцией устанавливать и сбрасывать
a = a | 0x1;
a = a & 0xFE;
Ответ от Капитан Гугл[гуру]
Потому что логические операции - это логические, а битовые - это битовые. Вообще все операции можно заменить побитовым И и сдвигом, но ведь неудобно, правда?
Простой пример: есть локальная сеть с адресами 192.168.0.0-192.168.0.63 (все числа - по одному байту, т. е. 1 адрес записывается 4 байтами). По-другому это обозначается как сеть 192.168.0.0 с маской 255.255.255.192. Что значит "с маской"? Это значит, что если применить маску с побитовым И к произвольному адресу, то для адресов этой подсети останется 192.168.0.0, а для остальных - что-то другое. Попробуйте такую операцию с логическими операторами проделать.
Потому что логические операции - это логические, а битовые - это битовые. Вообще все операции можно заменить побитовым И и сдвигом, но ведь неудобно, правда?
Простой пример: есть локальная сеть с адресами 192.168.0.0-192.168.0.63 (все числа - по одному байту, т. е. 1 адрес записывается 4 байтами). По-другому это обозначается как сеть 192.168.0.0 с маской 255.255.255.192. Что значит "с маской"? Это значит, что если применить маску с побитовым И к произвольному адресу, то для адресов этой подсети останется 192.168.0.0, а для остальных - что-то другое. Попробуйте такую операцию с логическими операторами проделать.
Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: с++ зачем нужны побитовые операции если есть обычные логические операторы?