Probleme cu operatorii de biti

Ai o întrebare legată de PHP? Incercăm să îi găsim soluţie. Sau poate doar vrei să publici un cod interesant.

Moderatori: Zamolxe, Moderatori

Utopia
PHPRomania Supporter
Mesaje: 10
Membru din: Mie Apr 07, 2004 8:55 pm
Localitate: Bucuresti
Contact:

Probleme cu operatorii de biti

Mesajde Utopia » Mar Apr 27, 2004 7:56 am

Pentru NOT, php-ul foloseste operatorul ~
Acuma, din ce stiu eu, ~0 = 1 si ~1 = 0 (ca de aia ii si zice not :D )

Dar, codul:


$a = 1;
$b=~$a;
echo $b;


ei bine, returneaza -1 !!!
iar pentru $a = 0 returneaza -2 !!!!!!!!!!!!!!!!!!!!!!!!

Gresesc undeva (in astea 3 linii de cod?) ??


Pace si prosperitate!

undo
New Member
Mesaje: 2
Membru din: Mar Apr 27, 2004 3:22 pm

Esti sigur ca e ~ not?

Mesajde undo » Mar Apr 27, 2004 3:25 pm

din cate stiu eu, not este "!"

Avatar utilizator
arond
Senior Member
Mesaje: 580
Membru din: Joi Mar 11, 2004 2:00 am
Localitate: 127.0.0.1
Contact:

Mesajde arond » Mar Apr 27, 2004 7:27 pm

Intregii sunt cu semn (complement fata de 2), iar operatorul ~ face o negare bitwise, pe reprezentarea binara a operandului.

Cu alte cuvinte:

0 = 0b0000000000000000
~0 = 0b1111111111111111 = -1
1 = 0b0000000000000001
~1 = 0b1111111111111110 = -2

Numa' bune.
People ask for criticism, but they only want praise.
W. Somerset Maugham (1874 - 1965).

http://www.arond-design.ro

Avatar utilizator
TheWanderer
Average Member
Mesaje: 142
Membru din: Lun Apr 05, 2004 4:25 pm
Localitate: Bucuresti
Contact:

Mesajde TheWanderer » Mie Apr 28, 2004 2:47 pm

Tu probabil cauti operatorul de negare logica, care este intr-adevar !.
Deci !$a.
Acum, ca sa mai exlpic putin ce a spus arond, pentru ca se pare ca nu esti familiar cu ce se intampla la nivel de bit.
Intai si intai, ce a spus el e corect, doar ca daca nu sti despre ce vorbeste ...nu are nici un sens! :P
Exista mai multe sisteme de reprezentare a numerelor intregi cu semn, dar cel folosit este sistemul in complement fata de doi. Aici bitul cel mai semnificativ este numit bit de semn (1 - negativ, 0 pozitiv)
Numarul se obtine astfel:
=> Daca este pozitiv, numarul are valoarea sa
=> Daca este negativ, numrul se obtine in complement fata de 2 (se complementeaza toti bitii 0=>1 si 1=>0 si se aduna 1)
Valorile ce pot fi reprezentate sunt de la -2 la n-1 si (2 la n-1) -1 .

Acum un exemplu (presupunem, pentru amorul artei, ca intul este pe 8 biti):
0 = 00000000;
~0 (negare a tuturor bitilor)
~0 = 11111111; (retinem bit de semn -)
Acum calculam valoarea:
- Complementam bitii: 00000000
- Adunam 1 => 00000001
Iar valoarea finala este -1
Were these demons from my dream? Or were they born within The Wanderer.

Utopia
PHPRomania Supporter
Mesaje: 10
Membru din: Mie Apr 07, 2004 8:55 pm
Localitate: Bucuresti
Contact:

Mesajde Utopia » Joi Apr 29, 2004 6:43 pm

cu rusine recunosc ca suna cunoscut... pentru anul 2 la calculatoare e de rau, huh? stiam eu ca trebuia sa-mi aleg Introducere in Informatica in loc de Grafica Inginereasca in anul I si sa nu-mi cumpar examenul de Asamblare.... :cry:

Da' lasati pe mine, ca o sa invat eu si chestiile astea. Am inteles ce-a vrut sa zica Arond.

Multumesc pentru raspunsuri si promit ca nu mai fac :)
Pace si prosperitate!


Înapoi la “Cod PHP”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 18 vizitatori