Bilgisayar Programlama/C/İşleçler

From Wikiversity
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