login  Naam:   Wachtwoord: 
Registreer je!
 Forum

deci naar binair max 12 getallen. (Opgelost)

Offline Shonof - 03/01/2008 11:28 (laatste wijziging 03/01/2008 11:33)
Avatar van ShonofNieuw lid Ik heb een scripje gemaakt om decimale getallen naar binaire getallen om te rekenen. Maar het werkt maar met max 12 decimale getallen. Dus 1234567890123 werkt niet meer.

Ik weet ook wel dat het via ---string decbin ( int $number )--- kan maar zo wil ik het niet.

Ik zou graag willen weten hoe ik dit kan oplossen. Alvast bedankt voor de moeite.

----------

  1. <?php
  2. $getal = 123456789012;
  3. $binair = array(0);
  4.  
  5. $i = 0;
  6. do{
  7. $binair[$i] = $getal % 2;
  8. $getal = intval($getal / 2);
  9. $i++;
  10. }
  11. while ( $getal > 0);
  12.  
  13. for ($i = count($binair); $i >= 0; $i--)
  14. {
  15. echo "$binair[$i]";
  16. }
  17. ?>

7 antwoorden

Gesponsorde links
Offline Stijn - 03/01/2008 11:49
Avatar van Stijn PHP expert
  1. $binair = array();


Als je 0 plaatst dan heeft de array $binair al 1 element.
Offline Shonof - 03/01/2008 11:52 (laatste wijziging 03/01/2008 11:52)
Avatar van Shonof Nieuw lid Ja maar het maximale blijft 12 decimale getallen, ik wil meer dan 12 decimale getallen.

  1. $getal = 123456789012;
deze werkt wel
  1. $getal = 123456789012345;
deze werkt niet
Offline Vincjenzo - 03/01/2008 12:24
Avatar van Vincjenzo Nieuw lid Volgens mij gaat het al fout als je een getal groter dan 4294967294 gebruikt  
Offline Shonof - 03/01/2008 13:45
Avatar van Shonof Nieuw lid Ok maar waarom is dat dan zo? Is dat gewoon het maximale getal wat php kan berekenen of???
Offline Stijn - 03/01/2008 14:05
Avatar van Stijn PHP expert Ik heb het even voor je uitgezocht en dat komt omdat je met een 32-bits systeem zit. Getallen groter dan 10 decimale cijfers zijn groter dan 32 bits en kunnen niet voorgestelt worden als 1 geheel.

Als bv volgende script uitvoert, krijg je de onderstaande output.

  1. echo decbin(999999999999);
  2. echo "<br>";
  3. echo decbin(9999999999999);


Citaat:
11010100101001010000111111111111
1001110011100101001111111111111


Je ziet dat er iets niet klopt en dat het met het 32-bits systeem te maken heeft. Je kan je code wel uitvoeren op een 64-bits systeem of je maakt een algoritme.
Offline Shonof - 03/01/2008 15:02
Avatar van Shonof Nieuw lid Thx super antwoord ik snap het
Offline Vincjenzo - 03/01/2008 15:08
Avatar van Vincjenzo Nieuw lid Een integer kan op een 32 bits systeem niet groter zijn dan 2147483647.

  1. <?php
  2. $num1 = 999999999999;
  3. $num2 = 9999999999999;
  4. $num3 = 2147483647;
  5.  
  6. // Dec to bin
  7. $bin_num1 = decbin($num1);
  8. $bin_num2 = decbin($num2);
  9. $bin_num3 = decbin($num3);
  10.  
  11. // Bin to dec
  12. $dec_num1 = bindec($bin_num1);
  13. $dec_num2 = bindec($bin_num2);
  14. $dec_num3 = bindec($bin_num3);
  15.  
  16. echo $num1.' '.$bin_num1.' '.$dec_num1.'<hr>';
  17. echo $num2.' '.$bin_num2.' '.$dec_num2.'<hr>';
  18. echo $num3.' '.$bin_num3.' '.$dec_num3.'<hr>';
  19. ?>
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.212s