![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 12.11.2009 Ostrzeżenie: (0%) ![]() ![]() |
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
po zmianach taki
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 ![]() Dzieki za jakiekolwiek wyjaśnienie Pozdrawiam |
|
|
![]()
Post
#2
|
|
![]() Newsman Grupa: Moderatorzy Postów: 2 033 Pomógł: 290 Dołączył: 21.12.2007 Skąd: Łódź ![]() |
& - 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:
A u Ciebie:
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). -------------------- Life's simple... You make choices and don't look back...
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 77 Pomógł: 27 Dołączył: 24.03.2002 Skąd: Tarnów Ostrzeżenie: (0%) ![]() ![]() |
(bo dziesiętnie 0xFFFF to właśnie 65536 zapisane hexadecymalnie). O jeden mniej ![]() -------------------- Zbyszek 'antyqjon' Siciarz
siciarz.net | Aquila DSP C++ |
|
|
![]()
Post
#4
|
|
![]() Newsman Grupa: Moderatorzy Postów: 2 033 Pomógł: 290 Dołączył: 21.12.2007 Skąd: Łódź ![]() |
Cytat O jeden mniej Racja. 65535 (licząc od 0) ![]() -------------------- Life's simple... You make choices and don't look back...
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 12.11.2009 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki @blooregard za słowa wyjaśnienia, o istnienu operatorów bitowych w PHP kompletnie zapomniałem
![]() 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:
daje nam 2 ![]() 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ą ? Ten post edytował Konfucjusz 13.11.2009, 00:45:14 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 6.05.2025 - 06:56 |