Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
sab1ch
BrainOverflow
124 / 128 / 41
Регистрация: 31.03.2013
Сообщений: 556
#1

Для чего нужны битовые операции? - C++

10.02.2016, 17:25. Просмотров 1571. Ответов 24
Метки нет (Все метки)

Здравствуйте.
Дошел в книге Стенли до битовых операций, но никак не могу понять их предназначение.
Где вообще они используются и как с ними работать? Объясните, если это возможно, на простых примерах.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2016, 17:25
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Для чего нужны битовые операции? (C++):

Битовые операции - перемещение бит для unsigned int - C++
Помогите разобраться, задание: Создайте функцию, которая перемещает биты для unsigned int на 30 бит в право, причем выходящие при...

Битовые операции, битовые поля. - C++
Здравствуйте! Еслть 4 диапазона чисел: 0-100, 0-100, 0-6000, 0-3. Сделать в виде битовых операций. Записать в unsigned int. Использовать...

Битовые операции. Написать программу для хранения в битовом поле информации о конфигурации компьютера. - C++
1. Написать программу для хранения в битовом поле информации о конфигурации компьютера. Например: Корпус AT – 0, ATX – 1; Видео на борту –...

Битовые операции и операции смещения языка С - C++
Доброго времени суток господа,помогите пожалуйста.Есть 2 кода к задаче,первый работает верно(переводит обычные числа в 16-ти ричные),а...

Битовые операции (написать функцию для сброса в ноль двух битов с заданными номерами в коде символа) - C++
Вот наткнулся на интересную задачку: "Написать функцию для сброса в ноль двух битов с заданными номерами в коде символа" Во-первых...

Для чего нужны указатели? - C++
Кто может объяснить для чего нужны указатели и смысл их? в интернете одна муть и еще для чего нужно new delete

24
DavidTs
3 / 3 / 3
Регистрация: 25.11.2015
Сообщений: 127
10.02.2016, 17:35 #2
Sabnik18, Битовые операции широко используются в ассемблере, в stl есть контейнер bitset. Вот здесь есть простые примеры. http://www.c-cpp.ru/books/bitovye-operatory
0
sab1ch
BrainOverflow
124 / 128 / 41
Регистрация: 31.03.2013
Сообщений: 556
10.02.2016, 17:47  [ТС] #3
DavidTs, а для чего они нужны вообще, если честно: "в stl есть контейнер bitset" - ничего мне не дало.
0
GbaLog-
Любитель чаепитий
3122 / 1462 / 351
Регистрация: 24.08.2014
Сообщений: 5,175
Записей в блоге: 1
Завершенные тесты: 2
10.02.2016, 17:51 #4
Цитата Сообщение от Sabnik18 Посмотреть сообщение
Дошел в книге Стенли до битовых операций
Там, разве, не приводятся примеры?
0
sab1ch
BrainOverflow
124 / 128 / 41
Регистрация: 31.03.2013
Сообщений: 556
10.02.2016, 17:53  [ТС] #5
makfak, примеры есть, но все же не все понятно. << >> еще более-менее понятны (сдвиг влево и вправо по битам, как я понял), а логические операторы не понятны. Да и вообще где сейчас и для чего используются битовые операции не ясно.
0
DavidTs
3 / 3 / 3
Регистрация: 25.11.2015
Сообщений: 127
10.02.2016, 18:01 #6
Sabnik18, Когда у тебя работа с нулями и единицами. Используются в низкоуровневых работах. Ну для простого примера операторы битового сдвига могут использоваться для выполнения быстрого умножения и деления целых чисел. Сдвиг влево равносилен умножению на 2, а сдвиг вправо - делению на 2.

Добавлено через 5 минут
Sabnik18, Вот пример логического "И".
11000001
01111111
& ---------------
01000001
Посмотри таблицу булевых функцией. ( 0&0, 0&1=0, 1&0=0, 1&1=1).
0
Ferrari F1
623 / 521 / 101
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
10.02.2016, 18:03 #7
Цитата Сообщение от Sabnik18 Посмотреть сообщение
но никак не могу понять их предназначение.
Ну например битовые операции (в частности, битовый сдвиг (причем сдвигов бывает целая куча видов)) нужны для умножения/деления чисел.
Также битовые операции (в частности, операция xor) широко используются в криптографических целях.

Вобще говоря, я когда только начинал читать литературу по Си++ (или чистому Си), то тоже задавался вопросом о предназначении битовых сдвигов и других операций.
Эта тема манипулирования числами на уровне битов очень хорошо обмусоливается в учебниках по ассемблеру.
1
SergioO
95 / 184 / 63
Регистрация: 13.12.2015
Сообщений: 995
10.02.2016, 18:49 #8
Цитата Сообщение от Sabnik18 Посмотреть сообщение
Дошел в книге Стенли до битовых операций, но никак не могу понять их предназначение
байт = 8 бит. 00000001 - значит включить одну из 8 ламп. 10011000 - значит 3 лампы будут светиться и тд, те 0 или 1 означает включена лампа или нет. (реальное устройство) теперь выключите старшую лампу (00011000), затем зажгите младшую (00011001). вот вам и битовые операции.
1
sab1ch
BrainOverflow
124 / 128 / 41
Регистрация: 31.03.2013
Сообщений: 556
10.02.2016, 19:06  [ТС] #9
DavidTs, это типа как сложение двоичных кодов?

Добавлено через 29 секунд
Ferrari F1, если вначале не понимал для чего нужны битовые операции, потом все равно же как-то понял. Как?
0
Ferrari F1
623 / 521 / 101
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
10.02.2016, 20:34 #10
Sabnik18, понимать, для чего нужны битовые операции - это одно, а найти для них уместное применение в своем коде - это совсем другое.
Если писать код на Си++, про битовые операции можно вобщем-то забыть.
0
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
10.02.2016, 20:53 #11
Цитата Сообщение от Sabnik18 Посмотреть сообщение
Для чего нужны битовые операции?
Очевидно же, для работы с битами.
0
_Ivana
3229 / 1857 / 157
Регистрация: 01.03.2013
Сообщений: 5,085
Записей в блоге: 5
10.02.2016, 23:27 #12
Если у тебя спрошено будет: что полезнее, солнце или месяц? — ответствуй: месяц. Ибо солнце светит днём, когда и без того светло; а месяц — ночью.
Не нужны короче ни битовые операции, ни солнце. И так светло.
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6967 / 3258 / 327
Регистрация: 04.12.2011
Сообщений: 9,016
Записей в блоге: 5
11.02.2016, 01:25 #13
Sabnik18, представьте, что Вы судья на матче по гольфу. Решающая подача, стадион замер... и на поле громыхая и поскрипывая выползает микросхемища. В каждой ноге по бите. Если не установить биты нижних ног в правильное положение, то она начнёт всё крошить в капусту. Начнётся хаос.
0
hoggy
6858 / 3060 / 525
Регистрация: 15.11.2014
Сообщений: 6,947
Завершенные тесты: 1
11.02.2016, 02:14 #14
Цитата Сообщение от Sabnik18 Посмотреть сообщение
Где вообще они используются и как с ними работать? Объясните, если это возможно, на простых примерах.
наиболее распространенное применение - флаги операций.

представьте себе, что есть некоторый механизм.
например - для работы с файлами.
он может быть открыт в режиме для чтения, или для записи,
или одновременно для чтения и записи.
и иметь целый ряд вспомогательных настроек:
не пересоздавать файл, если он не существует,
режим дозаписывания в конец и тп.

все эти настройки могут сосуществовать одновременно,
и они управляют логикой работы механизма.

как можно было реализовать такое?

можно было бы например,
создать класс, и завести в нем булевые переменные на каждый возможный режим.

C++
1
2
3
4
bool read;
bool write;
bool append;
bool no_create;
и тд.
если true, значит настройка активирована. false - выключена.

в итоге у вас может образоваться целая толпа булевых переменных,
из-за которых сильно разбухнет размер класса.

кроме того, как задавать все эти режимы работы?
заводить отдельный метод на каждый флажок что ли?

есть более экономичный и удобный способ - закодировать флаги в виде битов.

бит выключен - значит режим отключен.
бит включен - режим активирован.

в одну 32 битную интовую переменную влезет до 32 различных флагов включительно.
просто представьте себе сколько булевых переменных может сэкономить одна интовая.

и работать с ними удобно:

C++
1
window wnd(FULLSCREEN|MODAL|SHOW|DOUBLE_BUFFER);
можно указывать сразу пачку флажков через символ "палка".

деактивировать сразу пачками.

проверять по нескольку флажков за раз.

и тп.

благодаря чему, при помощи флагов удобно обрабатывать сложную логику,
которая зависит от совокупности множества факторов.

по этой причине, битовые операции получили широчайшее распространение
в области разработки "машин состояний".
4
GbaLog-
Любитель чаепитий
3122 / 1462 / 351
Регистрация: 24.08.2014
Сообщений: 5,175
Записей в блоге: 1
Завершенные тесты: 2
12.02.2016, 14:57 #15
hoggy, Что-то я подобное в исходниках Doom'a видел и во втором необязательном аргументе fstream, можете простейший пример привести, как их после передачи в функцию обработать?
0
12.02.2016, 14:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2016, 14:57
Привет! Вот еще темы с ответами:

Для чего нужны интерфейсы? - C++
Объясните на пальцах для чего нужны интерфейсы, как я понял они описывают методы и свойства, которые при наследовании классами должны были...

Для чего нужны вложенные структуры? - C++
Скажите пожалуйста для чего нужны вложенные структуры и где их используют?

Для чего нужны файлы с расширением .h, .c? - C++
Не подскажите, для чего нужен (.h) и (.c) файл? А (.cpp)? Я читал, что это заголовочный файл, но за зачем он нужен?

для чего нужны хеш таблицы? - C++
для чего нужны хеш таблицы? если есть массивы )


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru