Upload
lamdung
View
225
Download
0
Embed Size (px)
Citation preview
Bölüm 06: Operatörler 1
Mantıksal (Logic) Operatörler
Bilgisayar dillerinin hemen hepsinde, program akışını kontrol edebilmek ve yönlendirebilmek için
mantıksal operatörler kullanılır. Java dilinde kullanılan mantıksal operatörler aşağıda açıklanmıştır.
boolean a, b;
olmak üzere, mantıksal operatörlerin etkisi aşağıdaki tablodan görülebilir:
İşlem Operatör Açıklama
a && b Mantıksal ve Kısa devre ve
a || b Mantıksal veya Kısa devre veya
a & b Mantıksal ve Uzun devre ve
a | b Mantıksal veya Uzun devre veya
a ^ b Dışarmalı (exclusive) veya
!a Değilleme
Kısa devre (x != 0) && (1/x > 1) Güvenli
Uzun devre (x != 0) & (1/x > 1) Güvenli değil
Örnekler:
&& ve || mantıksal operatörlerinin farklı kullanım biçimlerini örnekler üzerinde göreceğiz.
Aşağıdakiler bu konuda biraz ipucu verebilirler.
bool aa = false;
bool bb = !aa;
ise bb nin değeri true olur.
Bölüm 06: Operatörler 2
int i=8, j=14;
bool xxx = i>4 && j<12;
ise, xxx false değerini alır. Oysa,
bool yyy = i>3 || j<10;
ise yyy 'nin değeri true olur.
bool zzz = (i>3 && j<10) || (i<9 && j>10)
ise, zzz nin değeri true olur.
boolean b;
b = !(3 > 2); // b is false
b = !(2 > 3); // b is true
boolean b;
b = 3 > 2 && 5 < 7; // b is true
b = 2 > 3 && 5 < 7; // b is now false
boolean b;
b = 3 > 2 || 5 < 7; // b is true
b = 2 > 3 || 5 < 7; // b is still true
b = 2 > 3 || 5 > 7; // now b is false
Java dilinde, mantıksal deyimleri birbirlerine bağlamak için iki operatör kullanılır
&& Logical AND (Mantıksal VE)
|| Logical OR (Mantıksal VEYA)
Kısa Devre AND Operatörü: &&
boolean1 ve boolean2 iki mantıksal deyim olmak üzere, bu iki deyimin mantıksal VE ile
birbirlerine bağlanması için
boolean1 && boolean2
yazılır. Bu mantıksal bir bileşkedir. Bilindiği gibi, bileşenlerinden her ikisi de doğru olduğunda bileşke
deyim doğru, aksi halde yanlıştır.
boolean1 && boolean2
deyiminde
Her iki operand boolean olmalıdır
Sonuç boolean’dir
Her iki operand true ise sonuç true, değilse false olur
Soldaki operand false ise, sağdaki operand değerlendirilmez (koşullu deyim)
true && true = true; // her iki operand değerlendirildi
false && true = false; // yalnız soldaki operand değerlendirildi
Bölüm 06: Operatörler 3
Dolayısıyla, boolean1 yanlış ise, boolean2 nin değeri hesaplanmaz. Çünkü boolean2 doğru
olsa bile bileşik deyim yanlış olacaktır. O nedenle, bu deyime koşullu VE deyimi ya da kısa-
devre-VE deyimi denir.
KoşulluAND01.java
package Bölüm06;
public class KoşulluAND01 {
public static void main(String[] args) {
int a = 0;
int b = 1;
if (a == 0 && b == 1) {
System.out.println("Doğru");
} else {
System.out.println("Yanlış");
}
}
}
Çıktı:
Doğru
LogicDemo.java
package Bölüm06;
public class LogicDemo {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println("a && b = " + (a && b));
System.out.println("a || b = " + (a || b));
System.out.println("!(a && b) = " + !(a && b));
}
}
Çıktı:
a && b = false
a || b = true
Bölüm 06: Operatörler 4
!(a && b) = true
LogicOR1.java
package Bölüm06;
public class LogicOR1 {
public static void main(String[] args) {
int x = 10;
if(x == 15 | x ==10) {
System.out.println( x + " sayısı 5 ile bölünebilir.");
}
}
}
Çıktı:
10 sayısı 5 ile bölünebilir.
Kısa Devre OR: ||
Boolean1 || boolean2
deyiminde boolean1, true ise, boolean2’nin değeri ne olursa olsun Boolean1 || boolean2
deyimi true olacaktır. O nedenle, boolean1 true değer alınca, derleyici boolean2’yi denetlemez;
Boolean1 || boolean2 bileşkesinin true olduğuna karar verir. Buna Kısa Devre OR deyimi
denilir.
KısaDevreOR2.java
package Bölüm06;
public class KısaDevreOR2 {
public static void main(String[] args) {
int x = 12;
if(x == 12 || x ==7) {
System.out.println( x + " sayısı 4 ile bölünebilir.");
}
}
}
Çıktı:
12 sayısı 4 ile bölünebilir.
Mantıksal Operatörler
Bölüm 06: Operatörler 5
Operator Açıklama
& Logical AND | Logical OR
^ Logical XOR (exclusive OR) || Short-circuit OR && Short-circuit AND ! Logical unary NOT &= AND assignment |= OR assignment
^= XOR assignment == Equal to != Not equal to ?: Ternary if-then-else
MantıksalOperatörler01.java
package Bölüm06;
public class MantıksalOperatörler01 {
public static void main(String[] args) {
// && (Koşullu - Kısa Devre AND) operatörü için tablo
System.out.printf( "%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n",
"Koşullu AND (&&)", "false && false", ( false && false ),
"false && true", ( false && true ),
"true && false", ( true && false ),
"true && true", ( true && true ) );
// || (Koşullu - Kısa Devre OR) operatörü için tablo
System.out.printf( "%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n",
"Koşullu OR (||)", "false || false", ( false || false ),
"false || true", ( false || true ),
"true || false", ( true || false ),
"true || true", ( true || true ) );
// & (boolean lojik AND) operatörü için tablo
System.out.printf( "%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n",
"Boolean logic AND (&)", "false & false", ( false & false ),
"false & true", ( false & true ),
"true & false", ( true & false ),
"true & true", ( true & true ) );
// | (boolean lojik OR) operatörü için tablo
Bölüm 06: Operatörler 6
System.out.printf( "%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n",
"Boolean lojik (inclusive) OR (|)",
"false | false", ( false | false ),
"false | true", ( false | true ),
"true | false", ( true | false ),
"true | true", ( true | true ) );
// ^ (XOR) operatörü için tablo
System.out.printf( "%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n",
"Boolean lojik (exclusive) OR (^)",
"false ^ false", ( false ^ false ),
"false ^ true", ( false ^ true ),
"true ^ false", ( true ^ false ),
"true ^ true", ( true ^ true ) );
// ! (lojik değilleme) operatörü için tablo
System.out.printf( "%s\n%s: %b\n%s: %b\n", "Logical NOT (!)",
"!false", ( !false ), "!true", ( !true ) );
}
}
Çıktı:
Koşullu AND (&&)
false && false : false
false && true : false
true && false : false
true && true : true
Koşullu OR (||)
false || false : false
false || true : true
true || false : true
true || true : true
Boolean lojik AND (&)
false & false : false
false & true : false
true & false : false
true & true : true
Boolean lojik (inclusive) OR (|)
false | false : false
false | true : true
Bölüm 06: Operatörler 7
true | false : true
true | true : true
Boolean lojik (exclusive) OR (^)
false ^ false : false
false ^ true : true
true ^ false : true
true ^ true : false
Logical NOT (!)
!false : true
!true : false
BooleanLojik01.java
package Bölüm06;
public class BooleanLojik01 {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
boolean c = a | b;
boolean d = a & b;
boolean e = a ^ b;
boolean f = (!a & b) | (a & !b);
boolean g = !a;
System.out.println(" a = " + a);
System.out.println(" b = " + b);
System.out.println(" a|b = " + c);
System.out.println(" a&b = " + d);
System.out.println(" a^b = " + e);
System.out.println("!a&b|a&!b = " + f);
System.out.println(" !a = " + g);
}
}
Çıktı:
a = true
b = false
a|b = true
a&b = false
a^b = true
!a&b|a&!b = true
Bölüm 06: Operatörler 8
!a = false
Mantık01.java
package Bölüm06;
public class Mantık01 {
public static void main(String[] args) {
int rakam = 7;
int sayı = 11;
int limit = 13;
if (++rakam % 2 == 0 & ++sayı < limit) {
System.out.println("if bloku çalışıyor");
System.out.println(rakam);
System.out.println(sayı);
}
System.out.println("if bloku çalışmıyor");
System.out.println(rakam);
System.out.println(sayı);
}
}
Çıktı:
if bloku çalışmıyor
8
12
BooleanNOT_01.java
public class BooleanNOT_01 {
public static void main(String[] args) {
int a = 0;
if (!(a == 0)) {
System.out.println("a sayısı 0 değil");
} else {
System.out.println("a sayısı 0 dır");
}
}
}
Bölüm 06: Operatörler 9
Çıktı:
a sayısı 0 dır
KısaDevre01.java
public class KısaDevre01 {
static boolean test1(int m) {
System.out.println("test1(" + m + ")");
System.out.println("Sonuç: " + (m < 1));
return m < 1;
}
static boolean test2(int m) {
System.out.println("test2(" + m + ")");
System.out.println("Sonuç: " + (m < 2));
return m < 2;
}
static boolean test3(int m ) {
System.out.println("test3(" + m + ")");
System.out.println("Sonuç: " + (m < 3));
Return m < 3;
}
public static void main(String[] args) {
if (test1(0) && test2(2) && test3(2))
System.out.println("Deyim doğrudur");
else
System.out.println("Deyim yanlıştır");
}
}
Çıktı:
test1(0)
Sonuç: true
test2(2)
Sonuç: false
Deyim yanlıştır
Aşağıdaki programın yalnızca ilk deyimi denetlediğini, ikinci deyimi denetlemeye gerek kalmadığını
Bölüm 06: Operatörler 10
görebilirsiniz.
Boolean02.java
public class Boolean02 {
static boolean aaaa()
{
System.out.println("aaaa fonksiyonu çağrıldı");
return false;
}
static boolean bbbb()
{
System.out.println("bbbb fonksiyonu çağrıldı");
return true;
}
public static void main(String[] args) {
System.out.println("regular AND:");
System.out.println("Sonuç : " + (aaaa() & bbbb()));
System.out.println();
System.out.println("kısa-devre AND:");
System.out.println("Sonuç : " + (aaaa() && bbbb()));
}
}
/*
aaaa() = false olduğu için
Kısa-devre AND deyimi
bbbb() metodunu çağırmaz
*/
Çıktı
regular AND:
aaaa fonksiyonu çağrıldı
bbbb fonksiyonu çağrıldı
Sonuç : false
kısa-devre AND:
aaaa fonksiyonu çağrıldı
Sonuç : false
Bölüm 06: Operatörler 11
Boolean03.java
package Bölüm06;
public class Boolean03 {
public static void main(String[] args) {
int x = 7;
int y = 3;
System.out.println((x == y-1)&& (7 < 6) );
System.out.println(5 >= 4 && 7 < 6 + 3);
System.out.println(5 != 4 && y+2 == 6);
System.out.println(!(5 == 4) && 7 > 6);
System.out.println(x==y);
}
}
Çıktı:
false
true
false
true
false
OR Operatörü: ||
boolean1 ve bolean2 iki mantıksal deyim olmak üzere, bu iki deyimin mantıksal VEYA ile
birbirlerine bağlanması için
boolean1 || boolean2
yazılır. Bu yeni bir mantıksal deyimdir. Bileşenlerinden herhangi birisi doğru olduğunda bileşke deyim
doğru, ancak her iki bileşeni yanlış olduğunda bileşke deyim yanlış olur.
boolean1 doğru ise, boolean2 nin değeri hesaplanmaz. Çünkü boolean2 yanlış olsa bile bileşke deyim
doğru olacaktır. O nedenle, bu deyime bazen kısa-devre_VEYA mantıksal deyimi denir.
Aşağıdaki programın yalnızca ilk deyimi denetlediğini, ikinci deyimi denetlemeye gerek kalmadığını
görebilirsiniz.
Boolean04.java
package Bölüm06;
Bölüm 06: Operatörler 12
public class Boolean04 {
public static void main(String[] args) {
short x = 13;
byte y = 9;
System.out.println((x == y-1)|| (7 < 6) );
System.out.println(5 >= 4 || 7 < 6 + 3);
System.out.println(5 != 4 || y+2 == 6);
System.out.println(!(5 == 4) || 7 > 6);
System.out.println(x==y);
}
}
Çıktı false
true
true
true
fals
Boolean05.java
package Bölüm06;
public class Boolean05 {
static boolean cccc() {
System.out.println("cccc metodu çağrıldı");
return true;
}
static boolean dddd() {
System.out.println("dddd metodu çağrıldı");
return false;
}
public static void main(String[] args) {
System.out.println("regular OR:");
System.out.println("sonuç : " + (cccc() | dddd()));
System.out.println();
System.out.println("kısa-devre OR:");
System.out.println("sonuç : " + (cccc() || dddd()));
}
}
Çıktı
regular OR:
cccc metodu çağrıldı
dddd metodu çağrıldı
sonuç : true
kısa-devre OR:
Bölüm 06: Operatörler 13
cccc metodu çağrıldı
sonuç : true
Başka Operatörler
Java dilinde aşağıdaki operatörleri de kullanırız.
Operand Açıklama
<< Sola kayan bit işlemi (left shift bitwise operator) >> Sağa kayan bit işlemi (right shift bitwise operator) . Nesne öğelerine erişim (member access for objects) [ ] Array indisleme (indexing operator used in arrays and collections) ( ) Veri dönüştürme operatörü (cast operator) ?: Koşullu deyim operatörü (ternary operator)
Bunları dersin başka bölümlerinde göreceğiz.