C Operatorlar (Amallar)

Arifmetik amallar. Amallar odatda unar, ya’ni bitta operandga qo’llaniladigan amallarga va binar, ya’ni ikki operandga qo’llaniladigan amallarga ajratiladi. Binar amallar additiv ya’ni + qo’shish va – ayirish amallariga, hamda multiplikativ, ya’ni * ko’paytirish, / bo’lish va % modul olish amallariga ajratiladi. Butun sonni butun songa bo’lganda natija butun songacha yaxlitlanadi.

Misol uchun, 20/3 = 6; (-20)/3 = -6; 20/(-3) = -6.

Modul amali butun sonni butun songa bo’lishdan hosil bo’ladigan qoldiqqa tengdir. Agar modul amali musbat operandlarga qo’llanilsa, natija ham musbat bo’ladi, aks holda natija ishorasi kompilyatorga bog’liqdir. Unar amallarga ishorani o’zgartiruvchi unar minus – va unar plyus + amallari kiradi. Bundan tashqari inkrement ++ va dekrement -- amallari ham unar amallarga kiradi. Inkrement ++ unar amali qiymatni 1 ga oshirishni ko’rsatadi. Amalni prefiks, ya’ni ++i ko’rinishda ishlatish oldin o’zgaruvchi qiymatini oshirib, so’ngra foydalanish lozimligini, postfiks esa i++ ko’rinishda ishlatish oldin o’zgaruvchi qiymatidan foydalanib, so’ngra oshirish kerakligini ko’rsatadi. Misol uchun, i ning qiymati 2 ga teng bo’lsin, u holda 3+(++i) ifoda qiymati 6 ga, 3+i++ ifoda qiymati 5 ga teng bo’ladi. Ikkala holda ham i ning qiymati 3 ga teng bo’ladi. Dekrement -- unar amali qiymatni 1 ga kamaytirishni ko’rsatadi. Bu amal ham prefiks va postfiks ko’rinishda ishlatilishi mumkin. Bu ikki amalni faqat o’zgaruvchilarga qo’llash mumkin.

Amallar ustivorligi. Murakkab ifodalarda qaysi amal birinchi navbatda bajarilishi operator prioritetiga bog’liq.

	Masalan: x = 5+3*8.

Ko’paytirish qo’shishga nisbatan yuqoriroq prioritetga ega. Shuning uchun bu ifoda qiymati 29 ga teng bo’ladi.

Agarda ikkita matematik ifodaning prioriteti teng bo’lsa, ular chapdan o’ngga qarab ketma-ket bajariladi.

	Masalan: x = 5+3+8*9+6*4.

Bu ifodada birinchi ko’paytirish amallari chapdan o’ngga qarab bajariladi 8*9 = 72 va 6*4 = 24. Keyin qo’shish amallari bajariladi. Natijada x = 104 qiymatga ega bo’ladi. Lekin, barcha amallar ham bu tartibga amal qilmaydi. Masalan, o’zlashtirish amali o’ngdan chapga qarab bajariladi. Additiv amallarining ustivorligi multiplikativ amallarining ustivorligidan pastrokdir. Unar amallarning ustivorligi binar amallardan yuqoridir.

Razryadli amallar. Razryadli amallar natijasi butun sonlarni ikkilik ko’rinishlarining har bir razryadiga mos mantiqiy amallarni qo’llashdan hosil bo’ladi.

Masalan,

  • 5 kodi 101 ga teng va 6 kodi 110 ga teng;
  • 6&5 qiymati 4 ga, ya’ni 100 ga teng;
  • 6|5 qiymati 7 ga, ya’ni 111 ga teng;
  • 6^5 qiymati 3 ga, ya’ni 011 ga teng;
  • ~6 qiymati 4 ga, ya’ni 010 ga teng;

Bu misollarda amallar ustivorligi oshib borishi tartibida berilgandir.

Bu amallardan tashqari M<<N chapga razryadli siljitish va M>>N o’ngga razryadli siljitish amallari qo’llaniladi. Siljitish M butun sonning razryadli ko’rinishiga qo’llaniladi. N nechta pozisiyaga siljitish kerakligini ko’rsatadi. Chapga N pozisiyaga surish bu operand qiymatini ikkining N chi darajasiga ko’paytirishga mos keladi. Misol uchun 5<<2 = 20. Bu amalning bitli ko’rinishi 101<<2 = 10100. Agar operand musbat bo’lsa, N pozisiyaga o’ngga surish chap operandni ikkining N chi darajasiga bo’lib kasr qismini tashlab yuborishga mosdir. Misol uchun 5>>2=1. Bu amalning bitli ko’rinishi 101>>2=001=1. Agarda operand qiymati manfiy bo’lsa ikki variant mavjuddir: arifmetik siljitishda bo’shatilayotgan razryadlar ishora razryadi qiymati bilan to’ldiriladi, mantiqiy siljitishda bo’shatilayotgan razryadlar nollar bilan to’ldiriladi. Razryadli surish amallarining ustivorligi o’zaro teng, razryadli inkor amalidan past, qolgan razryadli amallardan yuqoridir. Razryadli inkor amali unar amalga qolgan amallar binar amallarga kiradi.

Nisbat amallari. Nisbat amallari qiymatlari 1 ga teng agar nisbat bajarilsa va aksincha 0 ga tengdir. Nisbat amallari arifmetik turdagi operandlarga yoki ko’rsatkichlarga qo’llaniladi.

Misollar:

  • 1! = 0 qiymati 1 ga teng;
  • 1 == 0 qiymati 0 ga teng;
  • 3> = 3 qiymati 1 ga teng;
  • 3>3 qiymati 0 ga teng;
  • 2< = 2 qiymati 1 ga teng;
  • 2<2 qiymati 0 ga teng;

Katta >, kichik <, katta yoki teng >=, kichik yoki teng <= amallarining ustuvorligi bir xildir. Teng == va teng emas != amallarining ustuvorligi o’zaro teng va qolgan amallardan pastdir.

Mantiqiy amallar. C tilida mantiqiy tur yo’q. Shuning uchun mantiqiy amallar butun sonlarga qo’llanadi. Bu amallarning natijalari quyidagicha aniqlanadi:

  • x||y amali 1 ga teng agar x>0 yoki y>0 bo’lsa, aksincha 0 ga teng;
  • x&&y amali 1 ga teng agar x>0 va y>0 bo’lsa, aksincha 0 ga teng;
  • !x amali 1 ga teng agar x>0 bo’lsa, aksincha 0 ga teng;

Bu misollarda amallar ustivorligi oshib borish tartibida berilgandir. Inkor ! amali unar qolganlari binar amallardir.

Qiymat berish amali. Qiymat berish amali = binar amal bo’lib chap operandi odatda o’zgaruvchi o’ng operandi esa ifodaga teng bo’ladi.

	Misol uchun: z = 4.7+3.34

Bu qiymati 8.04 ga teng ifodadir. Bu qiymat Z o’zgaruvchiga ham beriladi. Bu ifoda oxiriga nuqta vergul (;) belgisi qo’yilganda operatorga aylanadi. z = 4.7+3.34; Bitta ifodada bir necha qiymat berish amallari qo’llanilishi mumkin.

	Misol uchun: c = y = f = 4.2+2.8;

Bundan tashqari C tilida murakkab qiymat berish amali mavjud bo’lib, umumiy ko’rinishi quyidagichadir:

	O’zgaruvchi_nomi amal = ifoda;

Bu yerda amal quyidagi amallardan biri *, /, %, +, -, &, ^, |, <<, >>.

Misol uchun:

  • x+ = 4 ifoda x = x+4 ifodaga ekvivalentdir;
  • x* = a ifoda x = x*a ifodaga ekvivalentdir;
  • x/ = a+b ifoda x = x/(a+b) ifodaga ekvivalentdir;
  • x>> = 4 ifoda x = x>>4 ifodaga ekvivalentdir;

Imlo belgilari amal sifatida. C tilida ba’zi bir imlo belgilari ham amal sifatida ishlatilishi mumkin. Bu belgilar oddiy () va kvadrat [] qavslardir. Oddiy qavslar binar amal deb qaralib ifodalarga yoki funksiyaga murojaat qilishda foydalaniladi. Funksiyaga murojaat qilish quyidagi shaklda amalga oshiriladi:

	<funksiya nomi> (<argumentlar royhati>).

Misol uchun sin(x) yoki max(a,b).

Kvadrat qavslardan massivlarga murojaat qilishda foydalaniladi. Bu murojaat quyidagicha amalga oshiriladi:

	<massiv nomi>[<indeks>].

Misol uchun a[5] yoki b[n][m].

Vergul simvolini ajratuvchi belgi sifatida ham amal sifatida ham qarash mumkin. Vergul bilan ajratilgan amallar ketma-ketligi bir amal deb qaralib, chapdan o’ngga hisoblanadi va oxirgi ifoda qiymati natija deb qaraladi.

Misol uchun:

	d = 4,d+2 amali natijasi 6 ga teng.

Shartli amal. Shartli amal ternar amal deyiladi va uchta operanddan iborat bo’ladi:

	<1-ifoda>?<2-ifoda>:<3-ifoda>

Shartli amal bajarilganda avval 1- ifoda hisoblanadi. Agar 1-ifoda qiymati 0 dan farqli bo’lsa 2- ifoda hisoblanadi va qiymati natija sifatida qabul qilinadi, aks holda 3-ifoda hisoblanadi va qiymati natija sifatida qabul qilinadi.

Misol uchun modulni hisoblash:

	x<0?-x:x yoki ikkita son kichigini hisoblash a<b?a:b.

Shuni aytish lozimki shartli ifodadan har qanday ifoda sifatida foydalanish mumkin. Agar F float turiga N int turiga tegishli bo’lsa, (N>0)?F:N ifoda musbat yoki manfiyligidan qat’iy nazar double turiga tegishli bo’ladi.

Shartli ifodada birinchi ifodani qavsga olish shart emas.