Bilgisayar Programlama/C/İşleçler

Eğitim seviyesi
Bu öğrenim kaynağı yükseköğrenim (üniversite) seviyesindedir.

Bu maddede C dilinde kullanılan altı farklı işleç ele alınacaktır.

Aritmetik İşleçler edit

İşleç İşlevi Örnek
+ Toplama x + y
- Çıkarma x - y
* Çarpma x * y
/ Bölme x / y
% Kalanı bulma x % y
++ Değişken değerini 1 artırma ++x
-- Değişken değerini 1 azaltma --x

Örnek:

  #include <stdio.h>
  
  int main() {
     int x = 20, y = 10, z = x + y;
     printf("%d", z);              /* 30 yazmalı */
     printf("\n%d", x - y);        /* 10 yazmalı */
     printf("\n%d", x * y);        /* 200 yazmalı */
     printf("\n%d", x / y);        /* 2 yazmalı */
     x = ++x;                      /* x'in değerini 1 artırır */
     printf("\n%d", x % y);        /* 1 yazmalı */
     printf("\n%d", x);            /* 21 yazmalı */
     y = --y;                      /* y'nin değerini 1 azaltır */
     printf("\n%d", y);            /* 9 yazmalı */
     return 0;
  }

Dönüş:

  30
  10
  200
  2
  1
  21
  9

Aritmetik işleçli değerler ister bağımsız bir değişken olarak atanabilir (toplama örneğinde olduğu gibi), ister ekrana direkt olarak yazdırılabilir (çıkarma ve çarpma örneklerinde olduğu gibi).

Binary (İkili Değer) İşleçleri edit

Bit düzeyinde (bitwise) işleçler olarak da bilinir, binary (0 ve 1) sayıları ile işlem yapar.

İşaret İşlev Örnek x=0, y=0 x=0, y=1 x=1, y=0 x=1, y=1
& AND x & y 0 0 0 1
| OR x | y 0 1 1 1
^ XOR x ^ y 0 1 1 0
~ NOT ~a Dönüşü 0 ve 1'lerin tam tersidir. Örn: ~7 (00000111) = 11111000
<< Bitleri sola kaydırır. x << y Örn: 5 << 3 (00000101) = 00101000 (3 basamak sola)
>> Bitleri sağa kaydırır. x >> y Örn: 6 >> 2 (00000110) = 00000001 (2 basamak sağa)

Örnek:

  #include <stdio.h>
  
  int main() {
     char x = 7, y = 9;                   /* binary değerleri 00000111 ve 00001001 */
     printf("%d\n", x & y);               /* dönüşü 00000001, decimal 1 */
     printf("%d\n", x | y);               /* dönüşü 00001111, decimal 15 */
     printf("%d\n", x ^ y);               /* dönüşü 00001110, decimal 14 */
     printf("%d, %d\n", ~x, ~y);          /* dönüşü 11111000, 11110110, decimal -8, -10 */
     printf("%d\n", x << 2);              /* dönüşü 00011100, decimal 28 */
     printf("%d\n", y >> 2);              /* dönüşü 00000010, decimal 2 */
     return 0;
  }


Dönüş:

  1
  15
  14
  -8, -10
  28
  2


NOT: Yukarıda binary dönüşümleri yapılan bu değerlerin dönüşü ondalık (decimal) formatta olacaktır, örn: 00000100 = 4 olarak dönecek

Atama İşleçleri edit

İşleç İşlevi Örnek Eşdeğeri
= Sayıya eşittir x = y x = y
+= Sayıya ekler x += y x = x + y
-= Sayıdan çıkarır x -= y x = x - y
*= Sayıyı çarpar x *= y x = x * y
/= Sayıyı böler x /= y x = x / y
%= Sayının kalanını alır x %= y x = x % y
&= Binary AND işleci x &= y x = x & y
|= Binary OR işleci x |= y x = x | y
^= Binary XOR işleci x ^= y x = x ^ y
<<= Binary sola kaydırma işleci x <<= y x = x << y
>>= Binary sağa kaydırma işleci x >>= y x = x >> y

Değişkene yeni değer atamak için yukarıdaki örneklerde olduğu gibi x = x + y şeklinde yazmak yerine kısaca x += y yazılabilir.

Örnek:

  #include <stdio.h>
  
  int main() {
     int x = 3;
     x += 7;               /* x'in değerini 7 artırır */
     printf("%d\n", x);    /* 10 */
     x -= 5;               /* x'in değerini 5 eksiltir */
     printf("%d\n", x);    /* 5 */
     x *= 3;               /* x'in değerini 3 ile çarpar */
     printf("%d\n", x);    /* 15 */
     x /= 5;               /* x'in değerini 5'e böler */
     printf("%d\n", x);    /* 3 */
     x %= 2;               /* x'in 2'ye bölümünden kalanını alır */
     printf("%d\n", x);    /* 1 */
     x &= 3;               /* binary olarak x'in şimdiki değeri (1) ile 3'ün AND'i (00000001 & 00000011) */
     printf("%d\n", x);    /* 00000001 yani 1 */
     x |= 2;               /* binary olarak x'in şimdiki değeri (1) ile 2'nin OR'u (00000001 | 00000010) */
     printf("%d\n", x);    /* 00000011 yani 3 */
     x ^= 5;               /* binary olarak x'in şimdiki değeri (3) ile 5'in XOR'u (00000011 ^ 00000101) */
     printf("%d\n", x);    /* 00000110 yani 6 */
     x <<= 3;              /* x'in binary değerinin (00000110) bitlerini 3 basamak sola kaydırır */
     printf("%d\n", x);    /* 00110000 yani 48 */
     x >>= 2;              /* x'in binary değerinin (00110000) bitlerini 2 basamak sağa kaydırır */
     printf("%d\n", x);    /* 00001100 yani 12 */
     return 0;
  }

Dönüş:

  10
  5
  15
  3
  1
  1
  3
  6
  48
  12

Karşılaştırma İşleçleri edit

İşleç İşlevi Örnek
== Eşittir x == y
!= Eşit değildir x != y
> Büyüktür x > y
< Küçüktür x < y
>= Büyük veya eşittir x >= y
<= Küçük veya eşittir x <= y

Dönüşü boolean (true & false) türünde olacaktır; doğru ise 1 (true), yanlış ise 0 (false) yazacaktır.

Örnek:

  #include <stdio.h>
  
  int main() {
     int x = 4, y = 6;
     printf("%d\n", x == y);               /* false, 0 yazmalı */
     printf("%d\n", x != y);               /* true, 1 yazmalı */
     printf("%d\n", x > y);               /* false, 0 yazmalı */
     printf("%d\n", x < y);               /* true, 1 yazmalı */
     printf("%d\n", x >= y);               /* false, 0 yazmalı */
     printf("%d\n", x <= y);               /* true, 1 yazmalı */
     return 0;
  }

Dönüş:

  0
  1
  0
  1
  0
  1

> (büyüktür) ve >= (büyük veya eşittir) işleçleri arasındaki fark, iki sayı eşit ise > işleci 0, >= işleci ise 1 olarak dönecektir. Aynı kural < (küçüktür) ve <= (küçük veya eşittir) işleçleri için de geçerlidir.

Lojik (Mantıksal) İşleçler edit

İşleç İsmi İşlevi Örnek
&& Mantıksal AND Tüm koşullar doğru ise dönüşü 1'dir. x < y && y > z
|| Mantıksal OR Koşulların biri veya birkaçı doğru ise dönüşü 1'dir. x > z || x = y
! Mantıksal NOT Dönüşü tersine çevirir; 1 olarak dönen kodlar 0 olarak dönecektir. !(x < z && x > y)

Örnek:

  #include <stdio.h>
  
  int main() {
     int x = 5, y = 8;
     printf("%d", x < y && y == 8)            /* x'in değeri y'den küçük (DOĞRU) ve y'nin değeri 8'e eşit (DOĞRU), AND işleci olduğu için 1 yazacaktır */
     printf("%d", x > 7 || y > 7)             /* x'in değeri 7'den büyüktür (YANLIŞ) ve y'nin değeri 7'den büyüktür (DOĞRU), OR işleci olduğu için 1 olarak dönecektir */
     printf("%d", !(x > 2 && y > x))          /* x'in değeri 2'den büyüktür (DOĞRU) ve y'nin değeri x'ten büyüktür (DOĞRU), AND işleci olduğu için 1 olarak dönecek fakat başında ! (NOT) işleci olduğu için 0 yazacaktır */
  }

Dönüş:

  1
  1
  0

"sizeof" İşleci edit

Değişkenlerin bellekteki boyutunu byte cinsinden verir. Ekrana yazdırmak için %lu ifadesi kullanılır.

Örnek:

  #include <stdio.h>
  
  int main() {
     int IntDegeri;
     char CharDegeri;
     floar FloatDegeri;
     printf("%lu\n", sizeof(IntDegeri));           /* normal int değişkeni boyutu 4 byte'dır */
     printf("%lu\n", sizeof(CharDegeri));          /* normal char değişkeni boyutu 1 byte'dır */
     printf("%lu\n", sizeof(FloatDegeri));         /* normal float değişkeni boyutu 4 byte'dır */
     return 0;
  }

Dönüş:

  4
  1
  4