13
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.

Mantıksal (Logic) Operatörler

  • 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.