Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> 32 bitowy int na 64 bitowym systemie, jak wymusic 32 bit inta?
Safek
post 11.05.2011, 11:36:44
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 28.12.2010

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


Witam
przegladalem forum ale takiego problemu nie znalazlem (w druga str bardziej:))

Problem jest taki:
posiadam system 64 bitowy a przez to mam rozszerzony zakres inta.
I teraz jak robie przesuniecie bitowe liczby, dajmy na to:

CODE
$zmienna = 1732584193<<5;
var_dump($zmienna);


wyswietla mi:

CODE
int(55442694176)


a powinien(dla inta 32-bitowego):
CODE
-391880672


probowalem juz ustawiac
CODE
ini_set(PHP_INT_SIZE,4);


ale to nic nie dalo, i funkcja (znalazlem w necie, typek twierdzi ze bangla)
CODE
function thirtyTwoBitIntval($value)
{
if ($value < -2147483648)
{
return -(-($value) & 0xffffffff);
}
elseif ($value > 2147483647)
{
return ($value & 0xffffffff);
}
return $value;
}


tez nie dziala poprawnie, tj ucina po prostu bity, nie interpretuje np jako liczba ujemna, a powinno...
nie mam juz sily na to, macie moze jakis pomysl?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Safek
post 7.06.2011, 10:08:15
Post #2





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 28.12.2010

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


stuningowalem lekko ta funkcje znaleziona w necie i wyglada teraz tak:

  1. function thirtyTwoBitIntval($value)
  2. {
  3. if ($value <= -2147483648)
  4. {
  5. $value = abs($value);
  6. $value = $value & 0xffffffff;
  7. $val_tmp = $value & 0x7fffffff;
  8. if($val_tmp != $value)
  9. {
  10. $value = ($value ^ 0xffffffff)+1;
  11. }
  12. else
  13. {
  14. return -$value;
  15. }
  16.  
  17. }
  18. elseif ($value > 2147483647)
  19. {
  20. $value = $value & 0xffffffff;
  21. $val_tmp = $value & 0x7fffffff;
  22. if($val_tmp != $value)
  23. {
  24. return ~$value = ($value ^ 0xffffffff);
  25. }else
  26. {
  27. return $value;
  28. }
  29. }
  30. return $value;
  31. }


to rozwiazalo problem (przynajmniej w wiekszosci przypadkow smile.gif)
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 19:45