Autor | Zpráva | ||
---|---|---|---|
Senky Profil |
#1 · Zasláno: 21. 6. 2011, 22:13:22
Zdravím,
pokúšal som sa napísať si vlastnú funkciu, ktorá by prevádzala čísla z desatinnej do dvojkovej sústavy v php. Tu je kód: $number = $_GET['n']; $zvysok = array(); do_calculation($number); function do_calculation($number) { global $zvysok; $zvysok[] = $number%2; if($number%2) { $number = ($number-1)/2; } else { $number = $number/2; } if($number) { do_calculation($number); } else { $i = count($zvysok)-1; while($i >= 0) { echo $zvysok[$i]; $i--; } } } Všetko vyzeralo, že funguje. Zadal som 1 a výsledok bol 1, pri 2 bol výsledok 10, atď. Avšak pri väčších číslach to má problém, a netuším prečo, keďže to je veľmi jednoduchá funkcia. Také 99999999999999 = 101101011110011000100000111101000-1-11-11-1-1-1-111-1-11 a netuším, ako sa tam môžu zobrať tie pomĺčky a pod. Vedeli by ste mi pomôcť, alebo aspoň povedať, prečo to tak je? Ďakujem. |
||
Spectator Profil |
#2 · Zasláno: 21. 6. 2011, 22:33:22 · Upravil/a: Spectator
Zkoušel jsem tvoje devítky i moje číslo 650000111199999999995345345345345345345345345364534593463419999977777774524543453 a fngovalo to stále OK.
Byl ovšem rozdíl v tom, že jsem si $_GET['n'] nahradil přímo tím číslem, které jsem chtěl, takž etam hude možná zakopaný pes EDIT: Dal jsem tam i ten get a i s nim mi to fungovalo na vysoká čísla |
||
YoSarin Profil |
#3 · Zasláno: 21. 6. 2011, 22:41:08
Senky:
nejsou ty pomlčky náhodou -1? Co vypíše echo PHP_INT_MAX; |
||
Majkl578 Profil |
#4 · Zasláno: 22. 6. 2011, 01:01:02 · Upravil/a: Majkl578
Maximální velikost čísla závisí na jádře systému. Na 32-bitových systémech to bude kolem dvou milionů, na 64-bitových systémech kolem 9e18. Popsané to je v dokumentaci.
Vlastní implementace jde napsat mnohem snáž: $n = 123456; echo decbin($n); //referenční hodnota echo '<br>'; $decbinX = function ($n) { $b = ''; for ($i = floor(log($n, 2)); $i >= 0; $i--) { $b .= ($n & pow(2, $i)) ? '1' : '0'; } return $b; }; echo $decbinX($n); |
||
Časová prodleva: 13 let
|
0