Operator hisoblash tartibi
Bir tilning operator ustunligi va birlashish qoidalari uning operatorlarini
hisoblash tartibini aytib beradi.
O‘rin (Navbat , Ketma ketlik)
Dasturlash tillari va axborot-kommunikatsiya texnologiyalari 1-semestr
52
Bir ifoda qiymati kamida ifodadagi operatorlarini hisoblash tartibidagi qismga
bog‘liq. Quyidagi ifoda ko‘rib chiqaylik:
a + b * c
Faraz qilaylik, o‘zgaruvchilar a, b va c deylik va mos ravishda 3, 4 va 5. Agar
(birinchi qo‘shish, keyin ko‘paytirish) chapdan o‘ngga hisoblansa natija 35. Agar
o‘ngdan chapga hisoblansa natijasi 23 bo‘ladi.
Ifodalardagi operatorlarni oddiygina chapdan o‘ngga yoki o‘ngdan chapga
hisoblash o‘rniga, matematiklar uzoq yillar oldin hisoblash ustuvorligining
ierarxiyasida operatorlarni joylashtirish va qisman bu ierarxiyada ifodalarning
hisoblash tartibini asoslash tushunchasini rivojlantirishgan. Misol uchun,
matematikada ko‘paytirish qo‘shishdan ko‘ra ortiq oliy ustuvor hisoblanadi, ehtimol
uning yuqori darajasi murakkabligi tufaylidir. Agar bu usul oldingi misoldagi ifodaga
qo‘llaniladigan bo‘lsa, ko‘p dasturlash tillaridagi kabi, ko‘paytirish birinchi qilinishi
kerak bo‘ladi.
Ifoda baholash uchun operator ustunlik qoidalari, turli darajadagi ustunlikning
operatorlari xisoblash tartibini qisman aniqlaydi. Ifodalar uchun operator qoidalari,
til loyihalari tomonidan ko‘rilgan, operator ustuvorligi ierarxiyasiga asoslangan.
Odatiy imperativ tillarning operator ustunlik qoidalari deyarli barcha bir xil bo‘ladi,
chunki ular o‘sha matematikaga asoslanadi. Bu tillarda, eksponent eng yuqori
o‘ringa (u til tomonidan taqdim qilingan paytda) ega, ortidan ko‘paytirish va bo‘lish,
keyin shu darajada olish binary qo‘shish va ayirish.
Ko‘pchilik tillar qo‘shish va ayirishning unar versiyalarini ham o‘z ichiga
oladi. u bir terimli Kiritilgan identifikatsiya operatori deb ataladi , chunki u odatda
hech qanday bog‘liqlik amali yo‘q va shu tariqa uning operand ustida hech qanday
ta’siri yo‘q. Ellis va Stroustrup (1990, bet 56), S ++ haqida gapirib, uni tarixiy halokat
deb ataydi va uni foydasizligini ko‘rsatib beradi. Unar minus, albatta, o‘zining
operandi belgisini o‘zgartiradi. Shuningdek, Java va S# da, unar minus, short va bayt
operandlarining int turiga mutloq konvertatsiyasiga sabab bo‘ladi.
Barcha odatiy imperativ tillarda, unar minus operatori , modomiki u qavslar
bilan ajratilib boshqa operatorlar yonida bo‘lishdan oldini olinar ekan, ifodaning yo
boshida yo istagan joyida ko‘rinishi (paydo bo‘lishi) mumkin. Masalan,
a + (- b) * c
bo‘lgan to‘g‘ri (legal), lekin
a + - b * c
odatda to‘g‘ri emas.
Dasturlash tillari va axborot-kommunikatsiya texnologiyalari 1-semestr
53
Keyingi, quyidagi ifodalarni ko‘rib:
- a/ b
- a * b
- a ** b
Birinchi ikki hollarda, unar minus operator va ikkilik operatorning nisbiy
ustunligi ikki operatorlar baholash tartibining ifoda qiymatiga ta’siri yo‘q. Oxirgi
holatda, biroq, u muhim emas.
Umumiy dasturlash tillarining, faqat Fortran, Ruby, Visual Basik va Ada
eksponention operatori bor. Barcha to‘rtalasida,eksponention unar minusdan yuqori
ustunlikka ega, shuning uchun
- A ** B teng bo‘ladi - (A ** B)
Ruby va S asoslangan tillarda arifmetik amalar ketma-ketligi quyidagicha:
.
Ruby
S-asoslangan tillar
Eng birinchi **
postfix ++, --
.
unar +-
prefix ++,--, unar + , -
.
*,/,%
*,/,%
Eng oxirgi
binary +,-
binary +,-
Do'stlaringiz bilan baham: |