Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Pytanie. W jakim celu stosuje się zapis & 0xFFFF?
Forum PHP.pl > Forum > Przedszkole
Konfucjusz
Witam serdecznie.

Mam do Was pytanie dotyczące pewnego zapisu.
Chciałem zmienić w komponencie Virtuemart (Joomla) sposób wyświetlania się pewnych jednostek (konkretnie ilość towaru w paczce).

Oryginalnie jednostki te były wyświetlane jako liczby całkowite, a ja chciałem je wyświetlić jako liczby dziesiętne.

Naturalnie, po kilku zmianach w bazie danych i drobnych przeróbkach w kodzie udało mi się tego dokonać, jednakże w kodzie natrafiłem na pewien zapis, którego niestety nie rozumiem i liczę ,że ktoś z Was mi go wyjaśni.

Niestety, na początku, mimo, zmian w bazie itd (typ kolumny product_packaging zmieniłem z INT na DEZIMAL(10,2) ) dalej pokazywało mi liczbę całkowitą.

Dopiero usunięcie w kodzie zapisu & 0xFFFF

Oryginalny zapis był taki
  1. $db->f("product_packaging") & 0xFFFF;


po zmianach taki

  1. $db->f("product_packaging");

pomogło,

W jakim celu stosuje się tutaj ten zapis (& 0xFFFF) i czy usunięcie jego będzie miało/ma jakis wpływ na działanie skryptu.

Ogólnie po zmianach wszystko działa , tylko właśnie nurtuję mnie to że bez powodu tego tam nie wstawili smile.gif

Dzieki za jakiekolwiek wyjaśnienie

Pozdrawiam






blooregard
& - to logiczne AND. Operator ten słuzy do wykonania logicznego działania AND na dwóch podanych argumentach (nie myl z &&).
AND ustawia wynikowy bit na jeden tylko wtedy gdy oba bity w podanych argumentach również mają wartość 1.

Przykład: 11 & 10 = 10.

Czemu?
Binarnie liczba 11 to 01011, liczba 10 to 01010.
Dokonując na tych dwóch liczbach operacji AND:

binarnie: 01011 | dziesiętnie: 11
AND
binarnie: 01010 | dziesiętnie: 10
=
binarnie: 01010 | dziesiętnie: 10 (ustawiamy odpowiedni bit na 1 jedynie tam, gdzie oba bity w podanych liczbach miały 1)

Prosty skrypt do testowania:
  1. <?php
  2. $a = 100;
  3. $b = 50;
  4.  
  5. echo "wynik operacji $a & $b = " . ($a & $b);


A u Ciebie:
  1. $db->f("product_packaging") & 0xFFFF;

dokonywana jest logiczna operacja AND na wartośc zwracanej przez metodę $db->f() dla argumentu "product_packaging" (pewnie jakaś wartość liczbowa odczytywana z tablicy asocjacyjnej dla zadanego klucza albo z bazy danych dla pola/kolumny o takiej nazwie) oraz liczby 65536 (bo dziesiętnie 0xFFFF to właśnie 65536 zapisane hexadecymalnie).
antyqjon
Cytat(blooregard @ 12.11.2009, 22:38:51 ) *
(bo dziesiętnie 0xFFFF to właśnie 65536 zapisane hexadecymalnie).

O jeden mniej winksmiley.jpg
blooregard
Cytat
O jeden mniej

Racja. 65535 (licząc od 0) smile.gif . W sumie 65536 możliwych wartości.
Konfucjusz
Dzięki @blooregard za słowa wyjaśnienia, o istnienu operatorów bitowych w PHP kompletnie zapomniałem smile.gif

Tylko w jakim celu zastosowano tutaj iloczyn bitowy, zwłaszcza, że są pewnie niektórzy użytkownicy VM, którzy również chcieliby przedstawić swoje jednostki w formie liczby dziesiętnej np: 1,5 (m2)

niestety np:
  1. <?php
  2.  
  3. $a = 2.5;
  4.  
  5. echo $a & 0xFFFF;
  6.  
  7. ?>

daje nam 2 smile.gif

naturalnie , jak juz wcześniej wspomniałem usunięcie 0xffff pomaga, ale chciałbym być w zgodzie z "oryginałem"
Czy można wogóle stosując iloczyn bitowy & (liczba dziesiętna z jakąś inna liczba heksadecymalną) mieć w wyniku liczbę decymalną/dziesietną ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.