Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Bity, różne wyniki przy zmianie kolejności operatorów.
KsaR
post
Post #1





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


Zadłem na so* pytanie czy można grupować operację na 1 kolumnie w MySQL:
http://stackoverflow.com/questions/3592978...s-in-one-column
Odpowiedź była że można:
  1. UPDATE user
  2. SET settings = settings|1&~2|4;


Problem:
Zauważyłem że kolejność tych operacji daję różne wyniki:
https://eval.in/622933

  1. $bits&~1|2&~4; // daję 30
  2. $bits2&~1&~4|2; // daję 26

Tu akurat w PHP ale w MySQL to samo...
Dodam że ta druga opcja zdaję się być poprawniejsza co do wyniku.

Może ktoś wytłumaczyć skąd ta różnica?
Ps. Na bitach się nie znam dlatego też zadałem pytanie co do grupowania.


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Z tego samego powodu co 3*1+2 != 3*2+1.


--------------------
Go to the top of the page
+Quote Post
KsaR
post
Post #3





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


Ok już trochę jaśniej, czyli ta druga opcja poprawna?
Wczoraj już szukałem coś o kolejności tych operatorów ale nie mogłem znaleźć.


--------------------
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Obydwie są poprawne.
Tak jak działania na liczbach dziesiętnych, które podałem.

Wyjątkiem kiedy kolejność operacji bitowych nie ma znaczenia są tylko operacje AND, tylko OR, lub tylko NOT.
Np. 1 | 2 | 6 będzie tożsame z 1 | 6 | 2.


--------------------
Go to the top of the page
+Quote Post

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 Aktualny czas: 22.08.2025 - 02:12