Linux / Unix Buyruq: expr

Ism

expr - ifodani baho bering

Sinopsis

expr arg ? arg arg ... ?

Arqonlarni arg (qo'shtirnoq oraliqlari orasiga qo'shish), natijani TCL ifodasi sifatida ko'rib chiqadi va qiymati qaytaradi. Tcl so'zlarida ruxsat berilgan operatorlar C iboralarida ruxsat berilgan operatorlarning bir to'plamidir va ular tegishli C operatorlari bilan bir xil ma'noga va ustunlikka ega. So'zlar deyarli har doim soni natijalarga ega (integer yoki suzuvchi nuqta qiymatlari). Misol uchun, ifoda

8,2 + 6 tugmachasini bosing

14.2 ga baholanadi. TCL iboralari operandlarning ko'rsatilishiga qarab C iboralaridan farq qiladi. Bundan tashqari, TCL iboralari nosimmetik operandlarni va mag'lubiyatlarni taqqoslashni qo'llab-quvvatlaydi.

Operandlar

TCL ifodasi operandlar, operatorlar va parantezlarning birikmasidan iborat. Operatorlar va operatorlar va parantezlar orasidagi bo'sh joy ishlatilishi mumkin; bu ibora ko'rsatmalariga rioya qilmaydi. Mumkin bo'lgan joylarda operandlar tamsayı qiymatlari sifatida talqin etiladi. Integer qiymatlar kasrli (odatiy holatda), sakkizinchi (operandning birinchi belgisi 0 bo'lsa ) yoki o'n oltinchi sonda (operandning birinchi ikkita belgisi 0x bo'lsa ) belgilanishi mumkin. Agar operand yuqorida ko'rsatilgan to'liq formatlardan biriga ega bo'lmasa, u holda iloji bo'lsa, u suzuvchi nuqta raqami sifatida ko'rib chiqiladi. Kiritish nuqtasi raqamlari ANSI mos keluvchi S kompilyatori tomonidan qabul qilingan usullarning har qanday birida ko'rsatilishi mumkin (ko'pchilik hollarda f , F , l va L qo'shimchalari ruxsat etilmaydi). Masalan, quyidagilarning barchasi amaldagi suzuvchi nuqtali raqamlardir: 2.1, 3., 6e4, 7.91e + 16. Agar biron bir izoh bo'lmasa, operand mag'lubiyat bo'lib qoladi (va unga faqat cheklangan operatorlar amal qilishi mumkin).

Operatorlar quyidagi yo'llar bilan ko'rsatilishi mumkin:

[1]

Raqamli qiymat sifatida tamsayı yoki suzuvchi nuqta.

[2]

Tcl o'zgaruvchisi sifatida standart $ eslatmasidan foydalaning. Argumentning qiymati operand sifatida ishlatiladi.

[3]

Ikkala tirnoqli biriktirilgan satr sifatida. So'zni ayrıştırıcı tirnoq orasidagi ma'lumotlar bo'yicha teskari aylantirish, o'zgarmaydigan va buyruqlar o'rnini oladi va natijada operand sifatida foydalaniladi

[4]

Qavslar ichiga qo'yilgan ipak. Ochiq brace va mos keladigan yopiq burchak orasidagi belgi operand sifatida foydalanilmaydi.

[5]

Qavslar ichiga TCL buyrug'i qo'shildi. Buyruq bajariladi va natijasi operand sifatida ishlatiladi.

[6]

Matn funktsiyasi sifatida argumentlar operandlar uchun yuqoridagi shakllardan biri, masalan, sin ($ x) . Belgilangan funktsiyalar ro'yxati uchun pastga qarang.

Yuqoridagi hollarda almashtirishlar (masalan, tirnoqli satrlarda) sodir bo'lganda, bu iboralar ko'rsatmalariga binoan amalga oshiriladi. Shu bilan birga, ifodalash protsessori chaqirilguniga qadar buyruq parserida qo'shimcha zaxira qatlami ishlab chiqilgan bo'lishi mumkin. Quyida muhokama qilinganidek, buyruq tarkibiy qismining tarkibiy qismini almashtirishni oldini olish uchun so'zlarni tarjimalarda qo'shib qo'yish odatiydir.

Oddiy iboralarning ba'zi bir misollari uchun o'zgaruvchining a qiymati 3 va o'zgaruvchizning b qiymati 6 ga teng deb taxmin qiling. So'ngra, har bir satrning chap tomonidagi buyruqlar satrning o'ng tomonida qiymat hosil qiladi:

$ a. $ b "5,6 tugatish 4 * [uzunlik" 6 2 "] 8 expr {{so'zli}}" $ a "} 0

Operatorlar

Tegishli operatorlar quyida keltirilgan, birinchi navbatda kamayib boruvchi tartibda guruhlanadi:

- + ~!

Unary minus, unary plus, bit-wise NOT, mantiqiy emas. Ushbu operandlarning hech biri string operanda uchun qo'llanilishi mumkin emas va bitparchali NOT faqat tamsaytlarga qo'llanishi mumkin emas.

* /%

Ko'paytiring, bo'ling, qolgan. Ushbu operandlarning hech biri string operatorlariga qo'llanishi mumkin emas, qolgan qismi faqat tamsaytlarga qo'llanilishi mumkin. Qolgan qism har doim bo'luvchi va divizordan kichik mutlaq qiymat bilan bir xil belgiga ega bo'ladi.

+ -

Qo'shish va olib tashlash. Har qanday sonli operand uchun amal qiladi.

<< >>

Chapga va o'ngga siljish. Faqat tamsayı operandlar uchun amal qiladi. To'g'ri shift har doim belgining bitini targ'ib qiladi.

<> <=> =

Boolean kam, katta, kamroq yoki teng va katta yoki teng. Har bir operator shartni to'g'ri bo'lsa, 1ni ishlab chiqaradi, aks holda 0. Bu operatorlar simlar bilan bir qatorda raqamli operandlarga ham qo'llanilishi mumkin, bu holda simli taqqoslash qo'llaniladi.

==! =

Boolean teng va teng emas. Har bir operator nol-bitta natija ishlab chiqaradi. Barcha operand turlari uchun amal qiladi.

&

Bit-don va AND. Faqat tamsayı operandlar uchun amal qiladi.

^

Bit-donli eksklyuziv YoKI. Faqat tamsayı operandlar uchun amal qiladi.

|

Bit-don OR. Faqat tamsayı operandlar uchun amal qiladi.

&&

Mantiqiy AND. Har ikkala operand nolga teng bo'lmasa, 1 holda 1 ta natija hosil qiladi. Boolean va soni (tamsayılar yoki suzuvchi nuqta) operandlari uchun amal qiladi.

| |

Mantiqiy OR. Agar har ikkala operator ham nol bo'lsa, u holda 0 ta natija hosil qiladi. Boolean va soni (tamsayılar yoki suzuvchi nuqta) operandlari uchun amal qiladi.

x ? y : z

If-then-else, C da bo'lsa. Agar x nolga teng bo'lmasa, natijada y qiymati bo'ladi. Aks holda, natijasi z qiymatidir. X operandning soni qiymati bo'lishi kerak.

Har bir operator tomonidan ishlab chiqarilgan natijalar haqida batafsil ma'lumot uchun C yo'riqnomasiga qarang. Barcha ikkitomonlama operatorlar guruhi chapdan o'ngga bir xil darajadagi darajada. Masalan, buyruq

4 * 2 <7 tugmachasini bosing

0 qaytaradi.

&& , || , va : operatorlar, C da bo'lgani kabi, «dangasa baholash» bor, ya'ni natijalarni aniqlash uchun zarur bo'lmasa operandlar baholanmaydi. Misol uchun, buyruq

{$ v? [a]: [b]}

[a] yoki [b] ning faqat bittasi $ v qiymatiga qarab baholanadi. Shunga qaramasdan, agar bu butun iborani brauzerlarda qo'shilsa, bu to'g'ri bo'ladi. Aks holda, TCL parser expr komandasini chaqirishdan oldin [a] va [b] ni baholaydi.

Matematik vazifalar

TCL quyidagi ifodalangan matematik vazifalarni qo'llab-quvvatlaydi:

abs kosh log sqrt acos double log10 srand asin exp pow tan otan rand tanh atan2 fmod round cip hipot sin cos int sinh

abs ( arg )

Argning mutlaq qiymatini qaytaradi. Arg to'liq yoki suzuvchi nuqta bo'lishi mumkin va natija bir xil shaklda qaytariladi.

akos ( arg )

Arg [0, pi] radians oralig'ida arg kosinini qaytaradi. Arg [-1,1] oralig'ida bo'lishi kerak.

asin ( arg )

[-pi / 2, pi / 2] radiuslari oralig'ida argning sinusini qaytaradi. Arg [-1,1] oralig'ida bo'lishi kerak.

atan ( arg )

[-pi / 2, pi / 2] radiuslari oralig'ida argning boshq tejamkorligini qaytaradi.

atan2 ( x, y )

[-pi, pi] radians oralig'ida y / x ning yassi tanasini qaytaradi. x va y ikkalasi ham 0 bo'lishi mumkin emas.

shift ( arg )

Eng kichik tamsayı qiymatini arg ning qiymatidan kamroq qaytaradi.

cos ( arg )

Radianlarda o'lchangan argning kosinini qaytaradi.

kosh ( arg )

Argning hiperbolik kosinini qaytaradi. Natijada to'lib toshgan bo'lsa, xato qaytariladi.

er-xotin ( arg )

Arg o'zgaruvchan qiymat bo'lsa, arg o'zgaradi, aks holda arg o'zgarib turadi va aylantirilgan qiymat qaytaradi.

exp ( arg )

Argumentlar argumentini qaytaradi, e ** arg deb aniqlanadi. Natijada to'lib toshgan bo'lsa, xato qaytariladi.

taglik ( arg )

Argdan katta bo'lmagan eng katta integral qiymatini qaytaradi.

fmod ( x, y )

X tomonidan bo'linishning suzuvchi nuqtali qoldiqlarini qaytaradi. Agar y 0 bo'lsa, xato qaytariladi.

hipot ( x, y )

O'ng burchakli uchburchakning gipotenus uzunligini ( x * x + y * y ) hisoblab chiqadi .

int ( arg )

Agar arg argumenti tamsayı bo'lsa, arg ni qaytaradi, aks holda arqonni kesish bilan tamsaytiradi va aylantirilgan qiymatni qaytaradi.

jurnal ( arg )

Argning tabiiy logaritmasini qaytaradi. Arg qiymati ijobiy bo'lishi kerak.

log10 ( arg )

Argning 10-sonli logaritmasini qaytaradi. Arg qiymati ijobiy bo'lishi kerak.

Pow ( x, y )

X ga ko'tarilgan x qiymatini hisoblab chiqadi. Agar x mutlaq bo'lsa, y to'liq qiymat bo'lishi kerak.

rand ()

Noldan suzuvchi nuqta raqamini birdan kamroq yoki matematik ma'noda [0,1] oralig'ini qaytaradi. Urug 'mashinaning ichki soatidan keladi yoki srand funktsiyasi bilan qo'lda o'rnatilishi mumkin.

dumaloq ( arg )

Agar arg = tamsayı qiymati bo'lsa, arg ni qaytaradi, aks holda argumentni yaxlitlash orqali aylantiradi va aylantirilgan qiymat qaytaradi.

sin ( arg )

Radianlarda o'lchangan argning sinüsini qaytaradi.

sinh ( arg )

Argning hiperbolik sinüsini qaytaradi. Natijada to'lib toshgan bo'lsa, xato qaytariladi.

sqrt ( arg )

Argning kvadrat ildizini qaytaradi. Arg notarif bo'lishi kerak.

srand ( arg )

Agar tamsayı bo'lishi kerak bo'lgan arg , tasodifiy sonli generator uchun urug'ini qayta tiklash uchun ishlatiladi. Urug 'birinchi tasodifiy sonini qaytaradi. Har bir tarjimon o'z urug'iga ega.

tan ( arg )

Radianlarda o'lchangan argning tanasini qaytaradi.

tanh ( arg )

Argning hiperbolik tanjensini qaytaradi.

Ushbu oldindan belgilangan funktsiyalardan tashqari, ilovalar Tcl_CreateMathFunc () yordamida qo'shimcha funktsiyalarni belgilashi mumkin.

Turlari, to'kish va aniqlik

Butun sonlarni hisobga olgan holda ichki hisoblar C tipidagi uzunlik bilan bajariladi va suzuvchi nuqta bilan bog'liq barcha ichki hisoblar C turi juftligi bilan amalga oshiriladi. Bir mag'lubiyatni suzuvchi nuqtaga aylantirishda, ustunlik oshib ketadi va TCL xatolik bo'ladi. Jadvaldan butun songa o'tkazish uchun, ortiqcha aniqlanish mahalliy C kutubxonasidagi ba'zi tartiblarning xatti-harakatiga bog'liq, shuning uchun uni ishonchsiz deb hisoblash kerak. Har qanday holatda, butunlay toshib ketishi va oqimlari qidiruv natijalari uchun odatda ishonchli tarzda aniqlanmaydi. Ko'taruvchi nuqtani to'ldirish va tushirish apparat tomonidan qo'llab-quvvatlanadigan darajada aniqlanadi, bu odatda ancha ishonchlidir.

To'liq, floating-point va string operands uchun ichki vakolatxonalar orasidagi konvertatsiya qilish kerak bo'lganda avtomatik ravishda amalga oshiriladi. Arifmetik hisob-kitoblar uchun bir nechta suzuvchi nuqta raqam kiritilgunga qadar tamsayılar ishlatiladi, undan so'ng suzuvchi nuqta ishlatiladi. Masalan,

5/4 ni ko'rsating

1 qaytaradi

5/4-sonli eksr 5 gacha ([string uzunligi "abcd"] + 0.0)

har ikkisi ham 1.25 qaytadi. Ko'taruvchi nuqta qiymatlari har doim `` bilan qaytariladi . '' Yoki ular to'liq qiymatlarga o'xshamaydi. Masalan,

20.0 / 5.0 raqamini ko'rsating

4.0 emas, balki 4 ni qaytaradi.

String operatsiyalari

Satrlari qiymatlari taqqoslash operatorlari operandlari sifatida ishlatilishi mumkin, lekin ifoda baholovchi uni taqqoslashni to'liq yoki suzuvchi nuqta sifatida bajarishga urinadi. Agar taqqoslash operandlaridan biri mag'lubiyatga va ikkinchisining soni qiymatiga ega bo'lsa, sonli operand tamsaytlar uchun % sprintf formati va % g qiymatida suzuvchi nuqta qiymatlari uchun qaytariladigan satrga o'tkaziladi. Misol uchun, buyruqlar

expr {"0x03"> "2"} expr {"0y" <"0x12"}

har ikki qaytish ham 1. Birinchi taqqoslash tamsayt taqqoslashi yordamida amalga oshiriladi, ikkinchisi esa ikkinchi operand mag'lubiyatga aylantirilgandan keyin mag'lubiyatga solishtirish yordamida amalga oshiriladi. Tl'ning qadriyatlarni imkon qadar raqamli deb hisoblash moyilligi sababli, == operatorlar kabi mag'lubiyatni taqqoslashni xohlasangiz va operandlarning qiymatlari o'zboshimchalik bilan bo'lishi mumkin bo'lsa, unda odatda yaxshi fikr emas. Buning o'rniga string buyrug'ini ishlatish yaxshiroq.

Ishlash masalalari

Brauzerlarda eng yaxshi tezlik va eng kichik xotira talablarini ifodalash. Ushbu TCL bayt derleyicisine eng yaxshi kod yaratish imkonini beradi.

Yuqorida aytib o'tilganidek, iboralar ikki marta tiklanadi: bir marta TCL parser va bir marta eksp komandasi tomonidan. Misol uchun, buyruqlar

$ b + 4 tugmachasini tayinlang

Qaytish 11, 4 marta ko'p emas. Chunki TCl ayrıştırıcısı birinchi navbatda o'zgaruvchilar uchun $ a + 2 o'rnini oladi, keyin expr buyrug'i $ a + 2 * 4 ifodasini baholaydi.

Aksariyat iboralar ikkilamchi almashtirishni talab qilmaydi. Yoki brauzerlarda yoki, agar bo'lmasa, ularning o'zgarmaydigan va buyruqlar ikkilamchi o'zlarini almashtirishni talab qilmaydigan raqamlar yoki satrlarni. Biroq, bir nechta rad javobsiz iboralar ikki tur almashtirishga muhtoj bo'lgani uchun, bayt kodi derleyici bu holatni boshqarish uchun qo'shimcha ko'rsatmalar chiqarishi kerak. Eng qimmat kod buyruqlar ikkilamchi o'z ichiga olgan bekor so'zlar uchun talab qilinadi. Ushbu ifodalar ifoda bajarilgan har bir yangi kodni ishlab chiqarish orqali amalga oshirilishi kerak.

Kalit so'zlar

arifmetik, boolean , solishtirish, ifoda, loyqa taqqoslash

Muhim: shaxsiy kompyuteringizda buyruq qanday ishlatilishini ko'rish uchun man buyrug'ini ( % man ) ishlating.