Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> operacje bitowe na dużych liczbach, 100 bitów na jedną liczbę i więcej
L_Devil
post
Post #1





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Witam. Na mojej stronie chcę stworzyć system tworzenia rang w panelu administracyjnym. Jest z tym problem, bo z każdą rangą muszą wiązać się konkretne uprawnienia do konkretnych operacji.

I nie byłoby w tym nic trudnego (takie uprawnienia to było by jedno pole typi bigint tabelu 'rangi'), gdyby nie fakt że możliwych uprawnień jest ponad 100. Czyli nasza liczba musi zawierać ponad 100 bitów, co ma około 17 cyfer w systemie dziesiętnym (nie wiem ile dokładnie, bo mi kalkulator nie chce liczyć 2^100 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ). A maksymalny rozmiast inta w php to marne 32 bity [okołow 2 miliardy w systemie dziesiętnym].

Rozwiązanie wpadło mi do głowy natychmiast - moją sumę bitów zapisywałbym jako string w postaci dziesiętnej - proste, łatwe i klarowne... no i gdzieś w manualu widziałem funkcje do obsługi dużych liczb. Szybko znalazłem to o co mi chodziło: ref.bc" title="Zobacz w manualu php" target="_manual. No i hała (IMG:http://forum.php.pl/style_emoticons/default/dry.gif) Nie mogę dokonać nawet prostego zsumowania bitów za pomocą tych funkcji, a jak próbuję normalnie to mi wychodzi około dwóch miliardów, nawet przy zachowanej konwersji do stringa
  1. <?php
  2. $zmienna = (string) WARTOSC1|WARTOSC2 // $zmienna ma teraz wartość około 2 miliardy, jeżeli suma bitowa tych dwóch liczb
     jest większa od dwóch miliardów
  3. ?>
Spróbowałem zatem dać
  1. <?php
  2. $zmienna = (string) (WARTOSC1|WARTOSC2) // $zmienna ma teraz wartość stałej WARTOSC2
  3. ?>

Kicha...

Czy ktoś wie może jak dokonać operacji bitowej na tak dużych liczbach?

Cóż, jeżeli to niemożliwe, będę musiał poszatkować to na paczki, każda po 32 bity... ale nie podoba mi się, bo znowu wymaga to kilku kolejnych pól w tabeli sql...

Będę wdzięczny za wszelkie pomysły i sugestie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował L_Devil 31.08.2005, 19:41:17
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
L_Devil
post
Post #2





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Rzecz w tym że
a.)
Uprawnienia mogą wynikać z różnych rzeczy, przynaleźności do określonych grup, rang, mogą też być osobno ustawione przez admina. Załóżmy że mamy to co napisałeś, jedną tabelę na uprawnienia. Admin nadał nam uprawnienia do wysyłania avataru. Potem staliśmy się członkiem grupy która również posiada to uprawnienie. A potem stracił członkowstwo w tej grupie - automatycznie pozbywamy się uprawnień które ona nadała, a więc wysyłanie avataru. I w tym momencie tracimy coś, co powinno wynikać z tego, co dał na admin (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
b.)
do zapisu uprawnień stosuję stałe, więc jako licbzy zapisywane są tylko w bazie danych, np:
  1. <?php
  2. define('AUTH_ADMIN', 1);
  3. define('AUTH_CHANGE_LOGIN', 2);
  4. define('AUTH_SEE_MAIL', 4);
  5. $uprawnienia_usera = AUTH_CHANGE_LOGIN | AUTH_SEE_MAIL; // user widzi maile innych i może zminić login
  6. /* (...) */
  7. if($uprawnienia_usera & AUTH_CHANGE_LOGIN)
  8. echo "Możesz zmienić login<br />";
  9. /* (...) */
  10. if( ! $uprawnienia_usera & AUTH_ADMIN)
  11. echo "Wybacz, ale nie masz uprawnień administratorskich<br />";
  12. ?>
Mam nadzieję że teraz jasne? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował L_Devil 3.09.2005, 09:51:34
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 15:07