Страницы

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

пятница, 19 октября 2018 г.

Передача аргументов в функцию через |

Частенько вижу, что аргументы в функцию передаются так:
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_JOYSTICK)
К указанным параметрам можно добавить и другие, также разделив их вертикальной чертой |. Объясните, пожалуйста, как это работает.


Ответ

операция | - стандартная во многих языках операция побитового ИЛИ. Т.е. она применима к 2 числам и для каждого бита будет выполнено побитовое или. Пример:
310 | 1010 = 00112 | 10102 = 10112 = 1110
Это особенно удобно при использовании флагов как констант - степеней 2.
Например у нас есть FLAG_A = 110, FLAG_B = 210, FLAG_C = 410 и так далее. Тогда FLAG_A | FLAG_C = 510 и в обратную сторону, 510 можно получить только такой комбинацией.
P.S. в случае с флагами безболезненно заменяется на обычный +, но смотрится не так красиво.

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

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