Fırat Ağış ile Java Bölüm 5 : Operatörler

   Şimdi geçen bölümde size kontrol ifadeleri ile program yönetmeyi göstermiştim. Şimdi ise programın içindeki değerleri işlemeyi göstereceğim. Bu şekilde sahip olduğunuz değerlilikleri karşılaştırabilirsiniz ya da değer atamalarını etkili şekilde yapabilirsiniz. Bunlar genel olarak kullanmadan da programlama yapabileceğiniz ama hem programınızı kısaltıp okumayı ve yazmayı kolaylaştıran, hem de sizi karışık algoritmalardan kurtarıp programınızın çalışma hızı ve kalitesini arttıran kısa yollardır. Ayrıntılı bir konu olduğu için sizi sıkmadan üzerinden geçeceğim. Eğer yeterli gelmezse firat@sibnetz.com adresinden bana ulaştığınız taktirde yeni bölümün başında sorularınızı yanıtlayabilir ya da sorularınız için bir ara bölüm açabilirim.

  Operatörler iki şekilde ayrılabilir. İlk ayırma yöntemi mantıksal, aritmetik ve ikilik tabanlıdır. Diğer kategorilendirme metodu ise karşılaştırma ve atama şeklindedir.



Aritmetik Atamalar

Atama var olan bir değerliliğin değerini değiştirmektir. Bu operatörler programınızın içindeki aritmetik değerlerin(byte, short, int, long, float, double) değerlerini işler. Bunlar aşağıdaki gibidir.


Operatörler
İşlevleri
=
Eşitleme
+
Toplama
-
Çıkarma
*
Çarpma
/
Bölme
%
Kalan Alma
++
1 Arttırma
--
1 Eksiltme
+=
Kendisiyle Toplama
-=
Kendisinden Çıkartma
*=
Kendisiyle Çarpmak
/=
Kendisini Bölmek
%=
Kendisinin Kalanını Alma

Anlamadınız dimi? Açıklamama izin verin. Ama bundan önce aşağıdaki örnekleri inceleyelim. 
a = 1;//a nın değeri 1'e eşitlendi.
a = 1 + 2; // a nın değeri 3 tür.
b=  2 - 1; //b 1'e eşittir.
c= 2 * 2; //Tahmine etmesi pek zor değil ama c 4'tür.
d= 4 / 1; //Cevabı bulan yoruma yazsın.
a++; //a = a + 1; in yerine kullanılır ve anın değerini 1 arttırır. a = 4
b--; //Benzer şekilde b nin değerini eksiltir. b = 0
a += 5;// a =  a + 5 yerine kullanılır. a = 9
b -= 4;// b = b- 4 dün karşılığıdır. b = -4
c *= 7;//Aynı mantık geçerlidir. c = 28
d  /= 2;//Cevap ve yaptığı işi anlayan yoruma yazsın.
b = c % a;// 28 / 9 kalanı yani 1 b nin değeri olarak atanır.
c%=a;//c nin değeri a ile bölümünden kalandır. Yani 1

Not: (//) ardından gelen yazılar programla birlikte derlenmez. Kendisinden itibaren bütün satırı derlemenin dışında tutar. Aynı şekilde /* ve */ arasındaki programda derlenmez. Deneme yanılma yolu ile program yazarken ya da programınızın belli yerlerine not düşmek istediğinizde çok kullanışlılardır. Şimdi sıra karşılaştırmalı aritmetik operatörlerde.

Not: y = ++x; ifadesi 
x++ ;
y = x; demektir.
y = x++; ise
y=x;
x++; anlamına gelir

Aritmetik Karşılaştırmalar

Aritmetik karşılaştırma operatörleri iki değerliliğin değerlerini karşılaştırıp, operatör ile belirtilen durumun doğru olması durumunda bir boolean yani mantıksal değer türetir. Bu operatörlere aşağıdan ulaşabilirsiniz.

Operatörler
İşlevleri
==
Eşittir.
!=
Eşit değildir.
< 
Küçüktür.
> 
Büyüktür.
<=
Küçük ya da eşittir.
>=
Büyük ya da eşittir.

Asıl kullanım alanları if, for, while ve do-while(Fırat Ağış ile Java Bölüm 4) komutlarını yönetmektir. Bunlar basit olduğundan üzerin de durmayacağım. Eğer size basit gelmediyse( ki bu gayet doğal) bana firat@sibnetz.com dan ulaşabilirsiniz. Şimdi devam edelim.

Mantıksal Operatörler

Bunlar iki boolean değerini karşılaştırır. Aynı zaman da aritmetik karşılaştırmalar ile türetilmiş boolean değerlerini de karşılaştırmak için kullanılabilirler. Aşağıdaki gibidirler.

Operatör
İşlevi
& veya &&
AND
| veya ||
OR
^
XOR
!
NOT
&=
Kendisi ile AND
|=
Kendisi ile OR
^=
Kendisi ile XOR
==
Eşit
!=
Eşit değil


Anlamadınız mı? Anlatayım.

AND: İki değerde true ise true dur. Geri kalan bütün olasılıklarda false dur.
OR: İki değerden ikiside false ise false tur. Aksi taktirde true dur.
XOR: İki değerden sadece biri true ise true dur.
NOT: Değer true ise false, false ise true dur.

Yine anlamadınız dimi? Bundan sonra sokakta ben çok zekiyim ben her şeyi bilirim havalarında gezmeyeceksiniz o zaman. Bu tablo belki size yardım eder.

A
B
A & B
A | B
A ^ B
!A
A == B
A != B
true
true
true
true
false
false
true
false
true
false
false
true
true
false
false
true
false
true
false
true
true
true
false
true
false
false
false
false
false
true
true
false
"Peki neden || ile |, && ile & var. Birer tane yeterli değil miydi?" derseniz cevabı çok basit. Java'nın üstünlüğü. Java pek çok programlama dilinde var olmayan bir özelliğe sahip. Kısa devre operatörleri. AND için birincinin false olduğu ve OR için birincinin true olduğu durumlarda cevap sırası ile false ve true olarak çıkacaktır. Hesap yapmak gereksizdir. Bu yüzden || ve && kullanılan durumlarda eğer birinci durum cevabı veriyorsa ikinci durum incelenmez ve bu olay karmaşık durumlarda programınızın hızını ciddi derecede arttırır.

Özel Mantıksal Opeatör : ?

Bu geri zekalı soru işaretini niye koydu demeyin. Operatörümüz soru işareti ve sizsiniz geri zekalı. Bu operatörün özelliği mantıksal karşılaştırma yapıp aritmetik atama yapmasıdır. Temel yapısı;

x=deyim1 ? deyim2 : deyim3;

şeklindedir. deyim1 bir boolean değerliliği olup deyim2 ve deyim3 bir aritmetik değerdir. deyim1 true ise x=deyim2 ve deyim1 false ise x=deyim2 dir. Bunu tek bir sayının değerini kontrol eden if-else komutu olarak düşünebilirsiniz. Örnek

int a;
int b;
int c;

...

c = a < b ? 2 : 3;

Bu program aşağıdakinin aynısıdır.

if(a < b){
   c=2;
}else{
   c=3;
}

Sizce hangisi daha kolay. Bence kesinlikle ikincisi.

İkilik Taban Operatörleri

Bunları büyük ihtimal hiçbir zaman kullanmayacaksınız o yüzden bakmadan geçmeniz sorun olmaz ve çok kafa karıştırıcıdır. Kalmaya mı karar verdiniz? Tebrikler, cehennemime hoş geldiniz. Alakasız olduğu için 0 ayrıntı ile geçicem. Sorular firat@sibnetz.com'a. true ve false lar aynı zamanda 1 ve 0 olarak ifade edilebilirler. Ne rastlantı, sayılar da ikilik tabanda 0 ve 1 olarak yazılabilir. Programlama yapıyorsanız rastlantılara inanmayın. Biz sayıların 0 ve 1 değerlerini mantıksal operatörler kullanarak işleyebiliyoruz. Tek fark ! yerine ~ kullanmamız. Nasıl mı? Şovun tadını çıkarın.

00101010

~00101010 = 11010101

_____________________________

00101010 = 42
00001111 = 15

00101010 & 00001111 = 00001010 = 10

_____________________________

00101010 | 00001111 = 00101111 = 47

_____________________________

00101010 ^ 00001111 = 00100101 =37

Ekrana anlamsızca bakanlar. Kaçmak için geç değil çünkü yeni başladık.

Kaydırmalar

Kaydırmalar 4 çeşittir. Karşınızda (davul sesleri) tablo.

Kaydırma
İşlevi
>> 
Sağa Kaydırma
>>> 
Sağa Sıfır Doldurarak Kaydırma
<< 
Sola Kaydırma
<<< 
Sola Sıfır Doldurarak Kaydırma

Anlamadınız mı? Kaçın. Ama yeterine cesur olanlara açıklayacağım. Kısaca

64(0100 0000)<<2 = 256(1 0000 0000)

Kısacası her sola kaydırmada sayı 2 ile çarpılır.

35(0010 0011)>>2 = 8(0000 1000) 

Her sağa kaydırmada sayı 2 ye bölünür ve kalan atılır.

Eğer sayı negatif ise ilk basamak 1 dir ve bu basamak kaydırmadan etkilenmez. Örnek

11111000(-8) >> 1 = 111111000(-4)

Ama bu kural <<< ve >>> için geçerli değildir. Örnek

11111111 11111111 11111111 11111111(int -1)
>>>24
00000000 00000000 00000000 11111111(int 255)

Her değerlilik tipnin(int,byte,long...) ikilik düzeni farklı olup bu konudaki araştırmayı size bırakıyorum. Araştırmanızı firat@sibnetz.com'a adınızla birlikte yollarsanız ilk 10 araştırmadan en beğendiğimi sizin adınız altında yayınlayacağım. Merak etmeyin yazının sonunda tekrarlayacağım.

Operatör Önceliği

İlk okul mezunları işlem önceliğini görmüştür. Java'da da bu öncelik ve parantezlerin kullanımı mevcuttur. Bu öncelik sırası aşağıda mevcuttur. 

En Yüksek
++(sonek)
--(sonek)



++(önek)
--(önek)
~
!
tip ataması
*
/
%


+
-
<< 


>> 
>>> 
< 
<=

> 
>=



==
!=



&




^




|




&&




||




?




=




En Küçük

Anlamayanlar kafalarına göre takılsın. Ya tutarsa.

Yarışma
Bu kendi çapımda düzenlediğim bir etkinlik. Daha büyükleri için Yarışma Anketinden Java'yı seçmeyi unutmayın. Kimsenin bakmadığı İkilik Taban Operatörleri başlığında gördük ki sayılar ikilik tabanda ifade edilebiliyor. Ve her değerlilik türü(byte, int, long...) için farklı. Bununla ilgili araştırmalarınızı firat@sibnetz.com'a yollayın. İlk 10 araştırmadan en beğendiğimi sizin adınız altında yayınlayacağım. Sorularınız, merak ettikleriniz, önerileriniz ve araştırmalarınız için bana firat@sibnetz.com'dan ulaşabilirsiniz.

Fırat Ağış
QERGH
Yazar: Yahya


Follow us Google+.

0 yorum:

My Blogger Themes