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