Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> modulo, modulo
-_krc_-
post
Post #1





Goście







  1. <?php
  2. $z = 0xFFFFFFFF;
  3. $k = $z % 0x525549DB;
  4. echo sprintf("%X", $k);
  5. ?>


Wierzcie lub nie ale wyswietla mi wynik "FFFFFFFF". Nie mam kompletnie pojecia co jest nie tak.. moze jakies typy zmiennych trzeba ustawiac.. help!

----------
Prosze uzywac [ php ] dla kodu php
-- dr_bonzo
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
dr_bonzo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


No i dziala dobrze. Haha, dlaczego? :

Bo max wartosc dla inta to 2mld (dokladnie to 2147483647 -- http://pl.php.net/manual/en/language.types.integer.php)

Tworzac inta poprzez
$z = 0xFFFFFFFF;
przypisujesz mu wartosc -1 (patrz system U2 -- http://pl.wikipedia.org/wiki/Kod_uzupełnień_do_dwóch ), bo int w php jest znakowany -- 32 bity na inta daja ci zakres od -2147483648 do +2147483647.

Dla 4mld php skonwertuje inta do floata, ale konwwertujac go recznie do inta otrzymujesz "oczekiwane" -1:
  1. <?php
  2. $z = 0xFFFFFFFF;
  3. var_dump( $z ); // float(4mld) -- traktowany jako liczba bez znaku
  4. $aa = intval( $z );
  5. var_dump( $aa ); // int (-1)
  6.  
  7. ?>


% modulo stosuje sie dla liczb calkowitych, czyli php skonwertuje oba skladniki do integera przed obliczeniem modulo
0xFFFFFFFF --> -1
0x525549DB --> 1381321179

i wykonujesz dzielenie modulo:
-1 % 1381321179
iloraz = 0, reszta -1
-1 w zapisie HEX to oczywiscie.... 0xFFFFFFFF (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
[]ckd


Nie uzywaj tak wielkich liczb lub uzyj klas obslugujacych wielkie liczby.
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: 30.12.2025 - 15:15