Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> 32 bitowy int na 64 bitowym systemie, jak wymusic 32 bit inta?
Safek
post
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
Zyx
post
Post #2





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Operacja przesunięcia bitowego jest zaimplementowana na poziomie procesora. Nie ma czegoś takiego, jak PHP_INT_SIZE w konfiguracji PHP. Jest to stała informacyjna.

Podana przez Ciebie funkcja znaleziona w sieci jest jak najbardziej poprawna. Twoje wątpliwości wynikają z tego, że nie rozumiesz, na czym polega przesunięcie bitowe: jest to ni mniej, ni więcej, tylko ucięcie bitów. A to że na systemach 32-bitowych dać nam to może liczbę ujemną, jest czystym przypadkiem wynikającym z tego, że najstarszy bit jest bitem znaku w kodzie uzupełnień do dwóch. W systemie 64-bitowym z definicji jest on położony dalej i jest to tylko INTERPRETACJA. Pod względem bitowym operacja jest POPRAWNA.
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: 7.10.2025 - 03:48