Rozpisanie flag bitowych

Podzielność. Reszty z dzielenia. Kongruencje. Systemy pozycyjne. Równania diofantyczne. Liczby pierwsze i względnie pierwsze. NWW i NWD.
Awatar użytkownika
bisz
Użytkownik
Użytkownik
Posty: 572
Rejestracja: 13 paź 2004, o 18:29
Płeć: Mężczyzna
Lokalizacja: Szczecin
Podziękował: 4 razy
Pomógł: 27 razy

Rozpisanie flag bitowych

Post autor: bisz »

znacie zapewne taką metode np nadawania jakiejs funkcji chociazby admin na serwerze dajmy na to counter-strike (kiedys to instalowalem w był szereg chyba15 uprawnień
wygladających następująco

2 uprawnienie 1
4 uprawnienie 2
8 uprawnienie 3
16 uprawnienie 4
32 uprawnienie 5
64 uprawnienie 6
128 uprawnienie 7
256 uprawnienie 8
512 uprawnienie 9
1024 uprawnienie 10
2048 uprawnienie 11
4096 uprawnienie 12
8192 uprawnienie 13
16384 uprawnienie 14
32768 uprawnienie 15

jak zapewne bystrzy matematycy zauważą są to kolejne potęgi 2.
chcemy dać takiemu adminowi wybrane z tych uprawnień niech to będą uprawnienia numer 1,6,3 i 4, sumujemy te liczby noi powiedzmy ze tutaj dodałem (mam nadzieje ze sie nie pomyliłem wyszło 90)
wklepujemy liczbe do configa servera i w tym momencie nasz server interpretujac liczbe 90 na swoj sposob wie ze chodzi nam o uprawnienia numer 1,3,4,6

moje pytanie brzmi.... jaki jest kod źródłowy takiego rozkodowującego algorytmu ???? bo przeciez tych kombinacji kurczę troszke będzie (nie chce mi sie liczyc bo kombinatorykę dawno miałem i musiałbym do tablic patrzec na te wzorki) ale troszke będzie i machinom troche czasu by to zajęło więc pytam jaki jest na to algorytm inteligentny bo jakis musi byc...
gnicz
Użytkownik
Użytkownik
Posty: 507
Rejestracja: 16 wrz 2004, o 18:24
Płeć: Kobieta
Lokalizacja: ???

Rozpisanie flag bitowych

Post autor: gnicz »

Liczby te sa kolejnymi potegami dwojki poniewaz w zapisie binarnym, kazdy bit odpowiada za inna wlasciwosc. Na poszczegolnych bitach wykonuje sie binarna alternatywe, a nie dodawanie. Jesli chcesz sprawdzic, ktore wlasciwosci sa ustawione, a ktore nie to trzeba po prostu sprawdzic po kolei wszystkie bity.

Przykladowy kod (gdzie f to flagi do, jak to okresliles, ,,rozkodowania'):

Kod: Zaznacz cały


int i;

for(i = 0; i < (sizeof(f) << 3); i++, f = f >> 1)
{
if(f & 0x01)
printf("Flaga %s
", nazwy_flag[i]);
}

Pozdrawiam, GNicz

PS. To nie jest zadne szyfrowanie!
ODPOWIEDZ