[*] - manzil bo`yicha qiymat
aniqlash yoki joylash
[,] - vergul
[?] – shartli amal
C++ da arifmetik amallar. Ko`p dasturlar bajarilishi davomida arifmetik amallarni bajaradi.
5.6-jadval. Arifmetik amal.
Arifmetik amal
Arifmetik operator
Algebraik ifoda
C++ dagi ifodasi
Qo`shish
+
A+B
A+B
Ayirish
-
A-B
A-B
Ko`paytirish
*
AB
A*B
Bo`lish
/
A/B
A/B
Modul olish
%
A MOD B
A % B
Ba`zi bir xususiyatlar. Butun sonli bo`lishda, yani bo`luvchi ham, bo`linuvchi ham butun son bo`lganda, javob butun son bo`ladi. Javob yaxlitlanmaydi, kasr qismi tashlab yuborilib, butun qismining o`zi qoladi.
Modul operatori [%] butun songa bo`lishdan kelib сhiqadigan qoldiqni beradi. x%y ifodasi x ni y ga bo`lgandan keyin chiqadigan qoldiqni beradi. [%]
operatori faqat butun sonlar bilan ishlaydi. Haqiqiy sonlar bilan ishlash uchun "math.h" kutubxonasidagi fmod funksiyasini qo`llash kerak.
Qavslar. C++ da qavslarning ma`nosi xuddi algebradagidekdir. Undan tashqari boshqa boshqa algebraik ifodalarning ketma-ketligi ham odatdagidek. Oldin ko`paytirish, bo`lish va modul olish operatorlari ijro qilinadi. Agar bir necha operator ketma-ket kelsa, ular chapdan o`nga qarab ishlanadi. Bu operatorlardan keyin esa qo`shish va ayirish ijro etiladi. Masalan, k = m * 5 + 7 % n / (9 + x); Birinchi bo`lib m * 5 hisoblanadi. Keyin 7 % n topiladi va qoldiq (9 + x) ga bo`linadi. Chiqqan javob esa m * 5 ning javobiga qo`shiladi. Lekin biz o`qishni osonlashtirish uchun va xato qilish ehtimolini kamaytirish maqsadida qavslarni kengroq ishlatishimiz mumkin. Yuqoridagi misolimiz quyidagi ko`rinishga ega bo`ladi.
k = ( m * 5 ) + ( ( 7 % n ) / ( 9 + x ) );
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`shuv [+] va ayirish [–] amallariga , hamda multiplikativ ya`ni ko`paytirish [*], bo`lish [/] va modul olish[%] amallariga ajratiladi. Additiv amallarining ustuvorligi multiplikativ amallarining ustuvorligidan pastroqdir. Butun sonni butun songa bo`lganda natija butun songacha yaxlitlanadi. Masalan, 10/3=3, (-10)/3=-3, 10/(-3) =-3.
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.
Binar arifmetik amallar bajarilganda tiplarni keltirish quyidagi qoidalar asosida amalga oshiriladi:
short va char tiplari int tipiga keltiriladi;
agar operandlardan biri long tipiga tegishli bo`lsa ikkinchi operand ham long tipiga keltiriladi va natija ham long tipiga tegishli bo`ladi;
agar operandlardan biri float tipiga tegishli bo`lsa ikkinchi operand ham float tipiga keltiriladi va natija ham float tipiga tegishli bo`ladi;
agar operandlardan biri double tipiga tegishli bo`lsa ikkinchi operand ham double tipiga keltiriladi va natija ham double tipiga tegishli bo`ladi;
agar operandlardan biri long double tipiga tegishli bo`lsa ikkinchi operand ham long double tipiga keltiriladi va natija ham long double tipiga tegishli bo`ladi;
Unar amallarga ishorani o`zgartiruvchi unar minus [–] va unar plus [+] amallari kiradi. Bundan tashqari [++] va [--] amallari ham unar amallarga kiradi.
[++] 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 ya`ni i++ ko`rinishda ishlatishdan oldin o`zgaruvchi qiymatidan foydalanib, so`ngra oshirish kerakligini ko`rsatadi. Masalan, i 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 qiymati 3 ga teng bo`ladi.
[--] unar amali qiymatni 1 ga kamaytirishni ko`rsatadi. Bu amal ham prefiks va postfiks ko`rinishda ishlatilishi mumkin. Masalan, i qiymati 2 ga teng bo`lsin, u holda --i ifoda qiymati 1 ga, i-- ifoda qiymati 2 ga teng bo`ladi. Ikkala holda ham i qiymati 1 ga teng bo`ladi.
Bu ikki amalni faqat o`zgaruvchilarga qo`llash mumkindir. 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 qiyjmati 4 ga ya`ni 100 ga teng. 6|5 qiyjmati 7 ga ya`ni 111 ga teng. 6^5 qiymati 3 ga ya`ni 011 ga teng.
~6 qiyjmati 2 ga ya`ni 010 ga teng.
Bu misollarda amallar ustivorligi oshib borishi tartibida berilgandir.
Bu amallardan tashqari M<>N o`ngga razryadli siljitish amallari qo`llaniladi. Siljitish M butun sonning razryadli
ko`rinishiga qo`llaniladi. N nechta pozitsiyaga siljitish kerakligini ko`rsatadi. Chapga N pozitsiyaga surish, ya`ni 5<<0=5 , 5<<1 =10, 5<<2=20 mos keladi.
Agar operand musbat bo`lsa N pozitsiyaga 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 qolgan amallar binar amallarga kiradi.
Nisbat amallari. Nisbat amallari qiymatlari 1 ga teng agar nisbat bajarilsa va aksincha 0 ga tengdir. Nisbat amallari arifmetik tipdagi operandlarga yoki ko`rsatkichlarga qo`llaniladi. Masalan,
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 ustivorligi bir xildir.
Teng [== ]va teng emas [!=] amallarining ustivorligi o`zaro teng va qolgan amallardan pastdir.
Mantiqiy amallar. Mantiqiy amallar asosan butun sonlarga qo`llanadi. Bu amallarning natijalari qo`yidagicha 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 operandni odatda o`zgaruvchi o`ng operandi odatda ifodaga teng bo`ladi. Masalan, Z=4.7+3.34;
Bitta ifodada bir necha qiymat berish amallari qo`llanilishi mumkin.
Masalan, C=y=f=4.2+2.8;.
Bundan tashqari C ++ tili da murakkab qiymat berish amali mavjud bo`lib, umumiy ko`rinishi quyidagichadir:
O`zgaruvchi_nomi amal= ifoda;
Bu yerda amal quyidagi amallardan biri bo`lishi mumkin: *,/,%,+,-, &,^,|, <<,>>. Masalan,
X+=4 ifoda x=x+4 ifodaga teng kuchlidir; X*=a ifoda x=x*a ifodaga teng kuchlidir; X/=a+b ifoda x=x/(a+b) ifodaga teng kuchlidir; X>>=4 ifoda x=x>>4 ifodaga teng kuchlidir;
Imlo belgilari amal sifatida. C ++ tilida ba`zi bir imlo belgilari ham amal sifatida ishlatilishi mumkin. Bu belgilardan oddiy () va kvadrat [] qavslardir. Oddiy qavslar binar amal deb qaralib ifodalarda yoki funksiyaga murojat qilishda foydalaniladi. Funksiyaga murojat qilish qo`yidagi shaklda amalga oshiriladi:
(). Masalan, sin(x) yoki max(a,b).
Kvadrat qavslardan massivlarga murojaat qilishda foydalaniladi. Bu murojaat quyidagicha amalga oshiriladi: []. Masalan, a[5] yoki b[n][m].
Vergul simvolini ajratuvchi belgi deb ham qarash mumkin 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. Masalan, d=4,d+2 amali natijasi 8 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. Masalan, modulni hisoblash: x<0?-x:x yoki ikkita son kichigini hisoblash aShuni aytish lozimki shartli ifodadan har qanday ifoda sifatida foydalanish mumkin. Agar F FLOAT tipga, N – INT tipga tegishli bo`lsa, (N > 0) ? F : N
ifoda N musbat yoki manfiyligidan qat`iy nazar DOUBLE tipiga tegishli bo`ladi. Shartli ifodada birinchi ifodani qavsga olish shart emas.
2>1>