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