Ostatnio zacząłem się dokształcać w zakresie operacji na bitach i chciałem w ramach treningu napisać prosty system uprawnień użytkowników oparty na flagach bitowych.
Posiadam 2 tabele w bazie danych, w skrócie:
Users:
id int UNSIGNED NOT NULL auto_increment,
group_id int UNSIGNED NOT NULL,
username varchar(32) NOT NULL
Groups:
id int UNSIGNED NOT NULL auto_increment
name varchar(32) NOT NULL,
permissions tinyint(8) NOT NULL
Do tabeli groups wprowadziłem dane:
// Unactivated - 00000000
// User - 01000111
// VIP - 11111001
1 - Opcja 1
2 - Opcja 2
4 - Opcja 3
8 - Opcja 4
16 - Opcja 5
32 - Opcja 6
64 - Opcja 7
128 - Opcja 8
Jak sprawdzić, czy user z grupą "VIP" ma włączoną opcję 4, a user z opcją User ma opcję 7? Dla różnych grup będzie inna suma bitów w systemie dziesiętnym reprezentująca daną opcję, od jakiej strony do tego podejść?
Z góry dziękuje za pomoc
@EDIT
Wynalazłem sposób poprzez shiftowanie bitów tzn:
if(00000111 & (1<<0)){ }
Tylko, czy jest to najlepsze wyjsce?