Showing posts with label negacija. Show all posts
Showing posts with label negacija. Show all posts

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.

19.4.20

Java - Rad sa bitovima

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

Pre nego što nastaviš da čitaš ovaj članak bilo bi dobro da se podsetiš šta je bit, šta je bajt i kakve to ima veze sa Java tipovima podataka. Takođe, korisno bi bilo da imaš predznanje iz matematičke logike. Ali ako nemaš, ne brini; objasniću ukratko osnove matematičke logike primenjene na Java programiranje.

Rad sa bitovima se odnosi na rad sa celobrojnim tipovima. Postoji pet celobrojnih tipova u Javi: byte, short, int, long i char. Tip char je, da podsetim, znakovni tip ali „ispod haube” je zapravo broj koji predstavlja redni broj karaktera iz tabele znakova. Taj redni broj je pozitivan ceo broj (ili nula). Npr. veliko latinično slovo A ima redni broj 65. Ostala četri celobrojna tipa mogu biti pozitivni, ali i negativni.

U programiranju se celobrojni tipovi kojima su predstavljeni samo pozitivni brojevi nazivaju neoznačeni, a tipovi kojima se predstavljaju i pozitivni i negativni brojevi se nazivaju označeni. Kod označenih je bitno da se sačuva informacija o znaku, tj. da li je broj pozitivan ili negativan. Kako je u kompjuterima sve predstavljeno nulama i jedinicama, tako se i znak predstavlja nulom ako je broj pozitivan, odnosno jedinicom ako je negativan.

Znak se, kao i kad koristimo „normalne” brojeve u matematici, piše „skroz levo”, npr pozitivan broj 3 se može napisati:

  • +3 u svetu matematike - naravno, plus se može izostaviti, podrazumeva se
  • 0_0000011 u Java svetu „ispod haube” - prva nula predstavlja znak „plus”

Podsetiću, binarni brojevi se mogu vizuelno razdvajati donjom crtom kako bi ljudima bili čitljiviji. Donja crta nema nikakve veze sa znakom broja. Navedeni broj 0_0000011 je isto što i 00000011, samo sam želeo da istaknem da krajnja leva nula predstavlja znak plus.