20.4.20

Unarni operator za invertovanje bitova

Besplatni Java kurs - 20. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Matematička logička operacija negacije(¬) se u Javi predstavlja unarnim operatorom za invertovanje bitova ~. Bito je naglasiti da se negacija odnosi na bitove, a ne na celobrojnu vrednost!

~ Unarni operator za invertovanje bitova - negacija (NOT)

Operator negacije radi nad bitovima brojeva u binarnom obliku, a ne kao negacija brojeva u matematici. Npr. negacijom broja 3 u matematici se dobija -3, ali u Java programiranju negacijom pomoću unarnog operatora za invertovanje bitova se uvek dobiju brojevi za jedan manji od matematičke negacije. Zato je negirano 3 u Javi -4. Suprotna negacija bi bila: -4 negirano matematički je 4, a u Javi negacijom broja -4 dobija se broj 3.

Naravno, sve vreme pričam o unarnom operatoru za invertovanje bitova (~), a ne o unarnom operatoru minus (-). Unarni operator minus se pri negaciji ponaša „normalno”, kao minus u matematici.

Ova „čudna stvar” se dešava jer unarni operator za invertovanje bitova binarne brojeve transformiše u prvi komplement, a Java predstavlja negativne brojeve drugim komplementom. Razlika između prvog i drugog komplementa je upravo ta da je prvi komplement za 1 manji od drugog komplementa. Tačnije, drugi komplement se dobije tako što se prvo binarni broj invertuje (inverzni binarni broj se zove prvi komplement), a zatim mu se doda 1.

Primer invertovanja pomoću unarnog operatora za invertovanje:

byte invertovanoTri = ~3;

Promenljiva invertovanoTri će posle izvršenja naredbe imati vrednost -4. Iako sam već objasnio kako radi operator za invertovanje, objasniću još jednom na drugi način.

Broj 3 iz prethodnog primera u binarnom obliku (ako zbog jednostavnijeg objašnjenja zanemarim prefiks 0b i posmatram ga kao byte, a ne kao int) izgleda ovako:

0000_0011

Posle invertovanja pomoću operatora za invertovanje bitova (~) izgleda ovako:

1111_1100

Kao što se vidi, operacijom invertovanja sve nule su pretvorene u jedinice i sve jedinice su pretvorene u nule. Dobijeni broj 1111_1100 u Javi predstavlja broj -4 u binarnom obliku. Istovremeno, to je prvi komplement broja 3. Ako tom broju u binarnom obliku dodam 1, dobiću drugi komplement:

1111_1101

Broj 1111_1101 u Javi predstavlja broj -3 u binarnom obliku.


Pročitaj i nastavak:

Besplatni Java kurs - 21. deo - Operator za logičko množenje - konjukciju

No comments:

Post a Comment