Operatörler – C Programlama Dili

in #tr5 years ago (edited)


C programlama dili eğitim serisinin bu dersinde operatörler konusuna değineceğim. Çok fazla operatör olmasa da düzenli olması açısından operatörleri gruplara ayırıp her birini ayrı başlık içerisinde vereceğim. Açıklama kısmı bittiğine göre başlayabiliriz.

Not : Uygulamalar önceki derslerde olduğu gibi Online C Compiler üzerinden yapılacaktır.

Aritmetik Operatörler

Aritmetik operatörler; C dilinde toplama, çıkarma, çarpma, bölme ve mod alma işlemlerini yapabileceğiniz  operatörlerdir.



Bu operatörlerden size yabancı olan belki sadece mod alma operatörüdür. Onu da aslında Matematik derslerinden biliyoruz. Bir sayının diğer sayı ile bölümünden kalanı almak için kullanılıyor.

Aritmetik operatörlerde bunların dışında bilinmesi gereken şey, işlem önceliği kavramıdır. Nasıl ki matematikte işlemler arası bir öncelik varsa aynı durum programlama için de geçerlidir.

İşlem önceliği kavramını şöyle ifade edebiliriz. Eğer bir işlem satırında birden fazla aritmetik operatör varsa C dili derleyicisi bu işlemleri öncelik sırasına göre işleyecektir.

Bu şekilde ele alırsak aritmetik operatörler arasında işlem önceliği en fazla çarpma, bölme ve mod almada olup sonrasında toplama ve çıkarmadadır.

Yani bir işlem satırında toplama ve çarpma işlemi varsa ilk olarak çarpma sonrasında toplama yapılır. Çarpma, bölme ve mod alma varsa, işlem önceliği soldan sağa doğrudur. Bu durum toplama ve çıkarma içinde geçerlidir.

Şimdi uygulama üzerinde görelim :

Sonuç ise aşağıdaki gibidir :

sonuc = a * 2 + b / 3;

İfadesi hakkında konuşalım. Bir satırda çarpma, bölme ve toplama işlemi bulunmaktadır. İşlem önceliği çarpma ve bölmede olduğundan ilk olarak bunlar yapılacak. Ancak kendi aralarında ilk olarak en solda olanın yapılması gerektiğinden a * 2 işlemi ile sonuç (4*2) 8 olacaktır. Sonrasında bölme işlemi yapılmalı. b/3 ten sonuç (17/3) 5 olacaktır. Son olarak 8 + 5 işleminden sonuç 13 bulunacaktır.

Sonuç 2 yi inceleyecek olursak ;

sonuc = b + 19 / a % 3;

Bu işlemde de ilk olarak bölme ve mod alma yapılıp en son sonuç b ile toplanacaktır. Bölme ile mod alma aynı seviyede olduğundan en soldan başlanacaktır. 19 /a yani 19 / 4’ten 4 gelecek. 4 % 3 yani 4 ün 3 ile bölümünden kalan 1 gelecektir. Son olarak b + 1 ile de sonuc 18 olacaktır.

Aritmetik operatörler tüm temel veri tipleri ile kullanılabilir.

Bir yerde mod operatörünün sadece int tipi için kullanıldığını okumuş olsamda aşağıdaki uygulama ile bu bilgiyi çürütmüş oluyoruz.

Sonuç aşağıdaki gibidir.

Yeri gelmişken belirtelim. C dilinde 4 çeşit temel veri tipi bulunur : int, char, float ve double

Ayrıca bunların signed , unsigned, long ve short şeklinde türevleri de mevcuttur.

Son olarak eğer parantez varsa en öncelikli ifade parantez içi olacaktır.

İlişkisel Operatörler (Relational Operators)

İlişkisel yani Relational Operatörler, tanımlanan iki değişken arasındaki ilişkiyi ifade etmek için kullanılır. Sonuç olarak doğru(true) ve yanlış (false) döndürür.

Bu operatörler şunlardır :

Görüldüğü gibi ilişkisel operatörler aslında iki değeri karşılaştıran operatörlerdir. Matematikten bazılarını biliyoruz.

Şimdi de uygulamasını görelim.

Sonuç aşağıdaki gibidir :

Uygulama üzerine konuşalım. a ve b adında int tipinde 2 değişken tanımladık ve sonucu herhangi bir değişkene atamadan direk printf üzerinden hesaplatıp, yazdırdık.

a < b , a b'den küçük demektir. Ve a'nın 23 b'nin de 45 olduğunu düşünürsek doğru bir ifadedir. Aynı şekilde a <= b, a b'den küçük veya eşittir demektir. a ve b nin değerini ve veya ifadesinin durumunu düşündüğümüzde bu ifadenin de doğru olduğunu görüyoruz.

a == b ifadesine bakarsak, burada a ve b nin eşit olma durumunu sorgulanmaktadır. a ve b eşit olmadığından sonuç false yani 0 dönmüş. != eşit değil operatörü de iki ifadenin eşit olmama durumunu sorgulamaktadır. a ve b eşit olmadığından sonuç doğrudur, true, 1 olarak döndürmüş.

Mantıksal Operatörler (Logical Operators)

C dilindeki mantıksal operatörler, matematikte gördüğümüz AND, OR ve NOT kavramlarının programlamaya uyarlanmış halidir. Operatörlerimiz :

Bu operatörleri biraz ayrıntıya girerek açıklayalım :

&&  : Logical AND Operatörü. ( a && b). ( a && b). Bu operatör a ve b nin her ikisi de sıfırdan farklı ise sonucu  1, ikisinden biri 0 ya da her ikisi de 0 ise 0 döndürür.

||  :  Logical OR Operatörü. (a || b).  Bu operatör a veya b den herhangi biri sıfırdan farklı ise 1, her ikisi de 0 ise 0 döndürür.

!   : Logical NOT Operatörü. !a. a ifadesinin değilini alacaktır, a sıfır ise 1, 1 ise 0 döndürecektir.

Şimdi de bu operatörlerin kullanımı göreceğimiz bir uygulama yapalım :

Artırma ve Eksiltme Operatörleri

++ ve   – –   operatörleri, kullanıldığı değişkenin değerini 1 artırmak veya 1 eksiltmek için kullanılır. Atama işaretine göre daha hızlı olduğu için tercih edilir. Bir değişkenin önünde veya arkasında kullanılabilir. Tek başlarına kullanıldıklarında herhangi bir fark olmasa da atama operatörü ile kullandıklarında bazı farklılıklar olmaktadır. Örneğin :

int a = 2;

sonuc = a++;

ifadesinde ilk olarak a değişkeninin 2 değerini sonuc değişkenine atayacak sonrasında a’nın değerini artıracaktır. Ancak

int a = 2;

sonuc = ++ a;

ifadesinde ise a değişkeninin değeri ilk önce artırılıp 3 yapılacak sonrasında sonuc değişkenine atanacaktır.

Bu durumu gösteren ufak bir uygulama hazırladım. İnceleyebilirsiniz :

Sonuç aşağıdaki gibidir :

" ? : " Operatörü

? : operatörü C dilinde kullanılan 3 operand alan tek operatördür. Kullanımı aşağıdaki gibidir :

koşul ? ifade1 : ifade2 ;

? (soru işareti) nin sol kısmında bulunan şart doğru ise ifade1, yanlış ise ifade2 işlenir.

Uygulamasını görelim :

Sonuç aşağıdaki gibidir:

Uygulamaya baktığımızda şartın (a > b) koşulu yanlış olduğundan ikinci ifade olan (b = 5) ifadesi işleyecektir, böylelikle ekrana b'nin değeri : 5 yazacaktır. Bu operatörün

sonuc = (a > b) ? 1 : 2;

şeklinde bir sabitle kullanımı da vardır.

Atama Operatörü

C dilinde “=” atama operatörü olarak kullanılır. Diğer operatörlerle birlikte kullanımı da mevcuttur:

int i = 9; // atama operatörü ile ilk değer atandı

i += 5; // i = i + 5 demek , + operatörü ile birlikte kullanıldı

Şeklinde kullanıldığı gibi aşağıdakine benzer

-=, /= , %= … kullanımları da vardır..

Bitwise Operatörleri

C dilinde bit seviyesinde işlem yapan operatörlerdir. 6 adettir :

  • & (AND),
  • | (OR),
  • ^ (XOR) ve
  • ~ 1’in tamlayanı
  • >> Shift Operatörü
  • << Shift Operatörü

& (AND) Operatörü : & işlemine tabi tutulan iki değişkenin karşılıklı bitleri 1 ise 1 değerini döndürürken, diğer türlü sıfır değerini döndürür. Çarpma işlemi gibi düşünebilirsiniz : 0 x 1, 1 x 0, 0 x 0 değerleri 0 iken 1 x 1 değeri 1 olur.

| (OR) Operatörü : | işlemine tabi tutulan iki değişkende bitlerden herhangi biri 1 ise değer 1 dönerken, her iki değer 0 ise 0 döndürecektir. Bunu da toplama işlemi gibi düşünebilirsiniz.

^(XOR) Operatörü : ^işlemine tabi tutulan iki değişkenin karşılıklı bitleri aynı değeri taşıyorsa 0, farklı değerleri taşıyorsa 1 değerini döndürür.( A^B gibi)

~ Operatörü : Bu operatör, tek operand alır. İnt veya char tipindeki değişkenlerin bit değerlerini tersine çevirir. 1 ise 0, 0 ise 1 yapar. (~A gibi)

Shift Operatörleri : Bu operatörler verilen değeri bit seviyesinde ele alır ve ikinci verilen değer kadar sağa veya sola shift yani kaydırma işlemini sağlar. (A >>3 gibi )

char  c = ‘A’, d;

d = (c & 52 ) ? ‘1’ : ‘0’ ;

şeklinde kullanımı vardır.

Bu operatörlerin kullanımını ilerleyen zamanlarda uygulama içerisinde vermek çok daha yerinde olacaktır.

sizeof Operatörü

Sizeof operatörü C dilinde bir değişkenin ya da bir veri tipinin boyutunun bulunması için kullanılır. Aşağıdaki uygulamada 2 kullanımına da yer verilmiştir.

Sonuç aşağıdaki gibidir :

İşlem Önceliği

İşlem önceliğinde tüm operatörleri göz önünde bulundurursak,

  • parantez (), köşeli parantez [], ++, -- , nokta . ve -> operatörleri en öncelikli olanlardır. (soldan dağa)
  • Sonrasında tek operand alanlar gelir: ! , ~, (type), sizeof , & (sağdan sola )
  • / , * , % (aritmetik operatörler , soldan sağa)
  • + ve – (soldan sağa)
  • >> ve << operatörleri (soldan sağa)
  • < ,<=, > , >= (soldan sağa, ilişkisel operatörler)
  • == ve != (soldan sağa, atama operatörleri)
  • & , ^, | (soldan sağa, bitwise operatörleri)
  • &&, || (soldan sağa, logical operatörler)
  • Ve son olarak ?: operatörü gelir.
() [] -> . 
! ~ ++ -- - (veri-türü) * & sizeof
* / %
+ -
<< >>
< <= > >=
== !=
&
^
|
&&
||
?
= += -= *= /= %=
,

Not : C dilinde ayrıca () parantez operatörü, öncelik kazandırma, metod bildirimleri gibi yerlerde kullanırken, [] köşeli parantez operatörü dizi gibi indis sahibi yapılarda kullanılır. Ayrıca , (virgül) de C dilinde bir operatördür.

Not : Bütün bunlara ek olarak değişik veri türlerine ait operatörler de mevcuttur. Bunlar ; structlar için .(nokta operatörü), pointerlar için -> operatörü ve & operatörü gibi. Bu operatörler o konular anlatılırken işlenecektir.

Bugünlük bu kadar, umarım faydalı bir çalışma olmuştur.

Uygulama noktasında herhangi bir sorun yaşarsanız aşağıdaki yorum panelini kullanarak iletişime geçmekten çekinmeyin lütfen. Teşekkürler.

Kaynak belirtilmeyen görseller @etasarim a aittir. / Pictures that don’t have any source belongs to @etasarim.



Posted from my blog with SteemPress : http://etasarim.cloudaccess.host/09/03/2019/operatorler-c-programlama-dili/
Sort:  

bi yerden sonra kodlama satırı olarak devam etmiş ders 🙄

Aslında o şekilde devam etmesi tamamen steempress in hatası @tahirozgen hocam. Bu eklentinin özellikle bu noktada (code) kendini güncellemesi gerekiyor. Her defasında sitede kodları verip steemit de yayınladıktan sonra kod kısımlarını silmek zorunda kalıyorum ki gerçekten çok gereksiz bir davranış. Keşke biri şu eklentiyi yapanlara derdimi anlatsa. Bundan sonra kodların sadece ekran görüntüsünü paylaşacağım sırf bu yüzden.

steempress in uyuşmamazlıkları sıkıntı maalesef. Ama bu tam olarak steempressten mi yoksa mhtml den markdoıwn a dönüşümden mi kaynaklanıyor emin değilim. Tek çare yayınladıktan sonra steemit üzerinde düzenlemek. Gerçi screenshot iyi fikirmiş .

You got a 6.29% upvote from @minnowvotes courtesy of @etasarim!

You got a 35.48% upvote from @brupvoter courtesy of @etasarim!

Congratulations! This post has been upvoted from the communal account, @minnowsupport, by etasarim from the Minnow Support Project. It's a witness project run by aggroed, ausbitbank, teamsteem, someguy123, neoxian, followbtcnews, and netuoso. The goal is to help Steemit grow by supporting Minnows. Please find us at the Peace, Abundance, and Liberty Network (PALnet) Discord Channel. It's a completely public and open space to all members of the Steemit community who voluntarily choose to be there.

If you would like to delegate to the Minnow Support Project you can do so by clicking on the following links: 50SP, 100SP, 250SP, 500SP, 1000SP, 5000SP.
Be sure to leave at least 50SP undelegated on your account.

Congratulations @etasarim! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You received more than 10000 upvotes. Your next target is to reach 15000 upvotes.

Click here to view your Board
If you no longer want to receive notifications, reply to this comment with the word STOP

You can upvote this notification to help all Steem users. Learn how here!

Hi, @etasarim!

You just got a 1.58% upvote from SteemPlus!
To get higher upvotes, earn more SteemPlus Points (SPP). On your Steemit wallet, check your SPP balance and click on "How to earn SPP?" to find out all the ways to earn.
If you're not using SteemPlus yet, please check our last posts in here to see the many ways in which SteemPlus can improve your Steem experience on Steemit and Busy.


Bu yazı Curation Collective Discord Sunucusunda küratörlere önerilmiş ve manuel inceleme sonrasında @c-squared topluluk hesabından oy ve resteem almıştır.
This post was shared in the #turkish-curation channel in the Curation Collective Discord community for curators, and upvoted and resteemed by the @c-squared community account after manual review.
@c-squared runs a community witness. Please consider using one of your witness votes on us here

Coin Marketplace

STEEM 0.30
TRX 0.12
JST 0.033
BTC 64344.02
ETH 3142.36
USDT 1.00
SBD 4.01