Skip to main content

Viss par Linux / Unix komandu: expr

Anonim

Nosaukums

expr - Izvērtējiet izteicienu

Kopsavilkums

expr arg ? arg arg … ?

Concatenates arg 's (pievienojot separatora atstarpes starp tām), novērtē rezultātu kā Tcl izteiksmi un atgriež vērtību. Operatori, kuriem atļauts izmantot TCL izteiksmes, ir operatoru apakškopa, kas atļauti C izteiksmēs, un tiem ir tāda pati nozīme un prioritāte kā attiecīgajiem C operatoriem. Izteiksmes gandrīz vienmēr dod skaitliskus rezultātus (veseli skaitļi vai peldošā komata vērtības). Piemēram, izteiksme

expr 8.2 + 6

novērtē līdz 14,2. Tcl izteicieni atšķiras no C izteicieniem tā, kā tiek norādīti operandi. Arī Tcl izteiksmes atbalsta ciparu operandus un virkņu salīdzinājumus.

Operands

Tcl izteiksme sastāv no operandu, operatoru un iekavu kombinācijas. Starp operandēm un operatoriem un iekavās var izmantot balto laukumu; to ignorē izteiciena norādījumi. Ja iespējams, operandi tiek interpretēti kā veseli skaitļi. Integer vērtības var norādīt ar decimāldaļu (parastā gadījumā), astotajā (ja ir pirmais raksturs operandam0) vai heksadecimālajā (ja operandas pirmās divas rakstzīmes ir0x) Ja operandam nav neviena no iepriekš norādītajiem veselo skaitļu formātiem, ja tas ir iespējams, tas tiek uzskatīts par peldošā komata numuru. Peldošo punktu skaitu var norādīt kādā no veidiem, ko pieņēmusi ANSI prasībām atbilstošs C kompilators (izņemot to, kaf, F, l, unL sufiksi vairumā iekārtu nebūs atļauta). Piemēram, visi šie ir derīgi peldošā komata numuri: 2.1, 3., 6e4, 7.91e + 16. Ja skaitliska interpretācija nav iespējama, operands tiek atstāts kā virkne (un uz to var attiecināt tikai ierobežotu operatoru kopu).

Operandi var norādīt kādā no šiem veidiem:

1

Kā skaitliskā vērtība, vai nu vesels skaitlis vai peldošā komata vērtība.

2

Kā Tcl mainīgais, izmantojot standartu$ apzīmējums. Mainīgā vērtība tiks izmantota kā operands.

3

Kā virkne, kas ir iekļauta dubultās pēdiņās. Paradīzes parsētājs izpildīs informācijas par ceturtdaļām backslash, mainīgo un komandu aizvietojumus un izmantos iegūto vērtību kā operandu

4

Kā virkne, kas piestiprināta lencēm. Parametrus starp atvērtām lencēm un atbilstošu tuvu lentu izmantos kā operandu bez jebkādiem aizstājējiem.

5

Kā TCL komandu pievieno iekavās. Komandu izpildīs, un tā rezultāts tiks izmantots kā operands.

6

Kā matemātiska funkcija, kuru argumentiem ir kāda no iepriekšminētajām formām operandēm, piemēram,grēks (x $). Tālāk skatiet definēto funkciju sarakstu.

Ja aizvietojumi notiek iepriekš (piemēram, iekšā citēto virknes), tās tiek izpildītas ar izteiciena norādījumiem. Tomēr komandas parsētājs pirms izteiciena procesora izsaukuma varēja veikt papildu aizstāšanas slāni. Kā aprakstīts turpmāk, parasti vislabāk ir pievienot apzīmējumus lencēm, lai nepieļautu komandu parsētājs veikt satura aizstāšanu.

Par dažiem vienkāršu izteicienu piemēriem pieņemsim mainīgoa ir vērtība 3 un mainīgaisbir vērtība 6. Tad katras līnijas kreisajā pusē esošā komanda dos vērtību rindas labajā pusē:

expr 3.1 + $ a6.1 expr 2 + "$ a. $ b" 5.6 expr 4 * garums "6 2" 8 expr {{word one} <"word $ a"} 0

Operatori

Turpmāk uzskaitīti derīgie operatori, sagrupēti prioritārā secībā:

- + ~ !

Unary minus, unary plus, bit-wise NOT, loģiski NOT. Nevienu no šiem operandiem nevar pielietot virknes operandiem, bet nedaudz - NOT var tikt piemērots tikai veseliem skaitļiem.

* / %

Reizināt, sadalīt, atlikušo daļu. Nevienu no šiem operandiem nevar piemērot stīgu operandiem, un atlikumu var piemērot tikai veseliem skaitļiem. Pārējā daļā vienmēr būs tāda pati zīme kā dalītājam un absolūtā vērtība, kas mazāka par dalītāju.

+ -

Pievienot un atņemt. Derīgs visiem ciparu operandiem.

<< >>

Kreisā un labā maiņa. Derīgs tikai veseliem skaitļiem. Tiesības maiņa vienmēr pavada zīmes bitu.

< > <= >=

Būla vērtība ir mazāka, lielāka, mazāka vai vienāda un lielāka vai vienāda. Katrs operators producē 1, ja nosacījums ir taisnība, 0 citādi. Šie operatori var tikt pielietoti virknēm, kā arī skaitliskiem operandiem, un tādā gadījumā tiek izmantots stīgu salīdzinājums.

== !=

Būla vienāds un nav vienāds. Katrs operators producē nulli / vienu rezultātu. Derīgs visiem operandu veidiem.

&

Bit-wise AND. Derīgs tikai veseliem skaitļiem.

^

Bit ekskluzīvs ekskluzīvs VAI. Derīgs tikai veseliem skaitļiem.

|

Bit-wise OR. Derīgs tikai veseliem skaitļiem.

&&

Loģiski un. Izveido 1 rezultātu, ja abi operandi nav nulles, pretējā - 0. Derīgs tikai boolean un skaitliskiem (veseliem vai peldošiem punktiem) operandiem.

||

Loģiski OR. Izveido 0 rezultātu, ja abiem operandiem ir nulle, 1 citādi. Derīgs tikai boolean un skaitliskiem (veseliem vai peldošiem punktiem) operandiem.

x ? y : z

Ja tad-cits, kā C. Ja x novērtē, ka tā nav nulle, tad rezultāts ir vērtība y . Pretējā gadījumā rezultāts ir z . The x operandam jābūt skaitliskai vērtībai.

Plašāku informāciju par katra operatora sniegtajiem rezultātiem skatiet C rokasgrāmatā. Visu bināro operatoru grupa no kreisās uz labo tajā pašā prioritātes līmenī. Piemēram, komanda

expr 4 * 2 <7

atgriež 0

The&&, ||, un?: operatoriem ir `` slinks novērtējums '', tāpat kā C, kas nozīmē, ka operandi nav novērtēti, ja tie nav vajadzīgi, lai noteiktu rezultātu. Piemēram, komandā

expr {$ v? a: b}

tikai viens noa vaib tiks faktiski novērtēts, atkarībā no vērtības$ v. Tomēr ņemiet vērā, ka tas ir tikai taisnība, ja visa izteiksme ir ietverta lencēm; citādi Tcl parsētājs novērtēs abusa unb pirms atsaukties uzexpr komandu

Matemātikas funkcijas

Izteiksmē Tcl atbalsta šādas matemātiskās funkcijas:

abs coshžurnālssqrt acos dubultālog10srand kā exppowiedegums atan grīdarandtanh atan2 fmodraunds ceil hipotēgrēks cos intsinh

abs ( arg )

Atgriež absolūto vērtību arg . Arg var būt vai nu vesels skaitlis vai peldošs punkts, un rezultāts tiek atgriezts tajā pašā formā.

acos ( arg )

Atgriež loka kosinusu no arg , diapazonā 0, pi radians. Arg jābūt diapazonā -1,1.

kā( arg )

Atgriež loka sine no arg , diapazonā -pi / 2, pi / 2 radians. Arg jābūt diapazonā -1,1.

atan ( arg )

Atgriež loka tangensu no arg , diapazonā -pi / 2, pi / 2 radians.

atan2 ( x, y )

Atgriež loka tangensu no y / x , diapazonā -pi, pi radians. x un y nevar abus būt 0.

ceil ( arg )

Atgriež mazāko veselā skaitļa vērtību ne mazāk kā arg .

cos ( arg )

Atgriež kosinuss no arg , mērot radianos.

cosh ( arg )

Atgriež hiperbolisko kosinīnu arg . Ja rezultāts varētu izraisīt pārplūdi, tiek atgriezta kļūda.

dubultā ( arg )

Ja arg ir peldošā vērtība, atgriež arg , citādi konvertē arg peldēt un atgriež konvertēto vērtību.

exp ( arg )

Atgriež eksponenciālo vērtību arg , definēts kā e ** arg . Ja rezultāts varētu izraisīt pārplūdi, tiek atgriezta kļūda.

grīdas ( arg )

Atgriež lielāko integrālo vērtību, kas nav lielāka par arg .

fmod ( x, y )

Atgriež peldošā komata atlikumu no sadalījuma x ar y . Ja y ir 0, kļūda tiek atgriezta.

hypot ( x, y )

Aprēķina taisnleņķa trijstūra hipotenūza garumu ( x * x + y * y ).

int ( arg )

Ja arg ir vesels skaitlis, atgriež arg , citādi konvertē arg ar veselo skaitli, izmantojot saīsināšanu, un atgriež iegūto vērtību.

log ( arg )

Atgriež dabisko logaritmu arg . Arg jābūt pozitīvai vērtībai.

log10 ( arg )

Atgriež pamatu 10 logaritms no arg . Arg jābūt pozitīvai vērtībai.

pow ( x, y )

Aprēķina vērtību x pacelts pie varas y . Ja x ir negatīva y jābūt veselam skaitlim.

rand ()

Atgriež peldošā komata skaitli no nulles līdz tikai mazāk par vienu vai, matemātiskā izteiksmē, diapazonu 0,1. Sēklas nāk no iekārtas iekšējā pulksteņa vai arī var iestatīt manuāli ar srand funkciju.

raunds( arg )

Ja arg ir vesels skaitlis, atgriež arg , citādi konvertē arg ar veselo skaitli, noapaļojot un atgriežot konvertēto vērtību.

grēks ( arg )

Atgriež sine no arg , mērot radianos.

sinh ( arg )

Atgriež hiperbolisku sinusu arg . Ja rezultāts varētu izraisīt pārplūdi, tiek atgriezta kļūda.

sqrt ( arg )

Atgriež kvadrātsakni no arg . Arg jābūt ne-negatīvam.

srand ( arg )

The arg , kas ir vesels skaitlis, izmanto, lai atjaunotu nejaušo skaitļu ģeneratora sēklu. Atgriež pirmo nejaušo skaitli no šīs sēklas. Katram mutiskajam tulkam ir savas sēklas.

tan ( arg )

Atgriež tangensu no arg , mērot radianos.

tanh ( arg )

Atgriež hiperbolisko tangensu no arg .

Papildus šīm iepriekš definētajām funkcijām programmas var definēt papildu funkcijas, izmantojotTcl_CreateMathFunc().

Veidi, pārplūde un precizitāte

Visi iekšējie aprēķini, kuros ir veseli skaitļi, tiek veikti ar C tipa ilgi , un visi iekšējie aprēķini, kuros ir peldošais punkts, tiek veikti ar C tipa palīdzību dubultā . Pārvēršot virkni uz peldošo punktu, tiek konstatēts eksponentu pārpildījums un rodas Tcl kļūda. Pārvēršanai par veselu skaitli no virknes pārtvēruma noteikšana ir atkarīga no dažu parasto darbību veikšanas vietējā C bibliotēkā, tādēļ to vajadzētu uzskatīt par neuzticamu. Jebkurā gadījumā parasto skaitļu pārslodze un nepietiekama plūsma parasti nav droši nosakāma starpproduktu rezultātos. Pārplūstošās vietas pārplūde un zemfrekvences tiek noteiktas tādā apmērā, kādu atbalsta aparatūra, kas parasti ir diezgan uzticama.

Konvertēšana starp iekšējiem attēlojumiem par integer, peldošā komata un string operands tiek veikta automātiski, ja nepieciešams. Aritmētiskajiem aprēķiniem tiek izmantoti veseli skaitļi, līdz tiek ieviests zināms peldošā komata skaitlis, pēc kura tiek izmantots peldošā komata skaitlis. Piemēram,

expr 5/4

atgriež 1, kamēr

expr 5 / 4.0 expr 5 / (virknes garums "abcd" + 0.0)

abi atgriežas 1,25. Peldošo punktu vērtības vienmēr tiek atgrieztas ar ``.'' vai ane lai tie neizskatās kā veseli skaitļi. Piemēram,

expr 20.0 / 5.0

atgriež4.04.

Stīgu operācijas

String vērtības var tikt izmantotas kā salīdzināšanas operatoru operandes, lai gan izteiksmes vērtētājs mēģina veikt salīdzinājumus kā vesels vai peldošs punkts, kad tas ir iespējams. Ja viens no salīdzinājuma operandiem ir virkne, bet otrai - ciparu vērtība, ciparu operands tiek pārveidots atpakaļ uz virkni, izmantojot C sprintf formāta specifikētājs% d par veseliem skaitļiem un% g par peldošās vērtības vērtībām. Piemēram, komandas

expr ("0x03"> "2") expr ("0y" <"0x12")

abas atgriešanās 1. Pirmais salīdzinājums tiek veikts, izmantojot veselu skaitļu salīdzinājumu, un otrais tiek darīts, izmantojot virkņu salīdzinājumu pēc tam, kad otrais operands tiek pārveidots par virkni18. Tā kā Tcl ir tendence vērtēt vērtības kā skaitļus, kad vien tas ir iespējams, parasti nav lietderīgi izmantot tādus operatorus kā==ja jūs patiešām vēlaties virknes salīdzināšanu un operandu vērtības varētu būt patvaļīgas; šajos gadījumos ir labāk izmantotvirkne komandu vietā.

Veiktspējas apsvērumi

Pievienojiet izteiksmes breketēs, lai iegūtu vislabāko ātrumu un mazākās uzglabāšanas prasības. Tas ļauj Tcl baitu koda kompilatoram ģenerēt vislabāko kodu.

Kā minēts iepriekš, izteicienus aizstāj divreiz: vienu reizi ar Tcl parsētājs un vienu reizi ar expr komandu Piemēram, komandas

iestatiet 3 iestatīt b {$ a + 2} expr $ b * 4

atgriešanās 11, nevis 4 reizes. Tas ir tāpēc, ka Tcl parsētājs vispirms aizstās$ a + 2 par mainīgob, tadexpr komanda novērtēs izteicienu$ a + 2 * 4.

Lielākajai daļai izteiksmju nav nepieciešams otrais aizstāšanas kārta. Vai nu tie ir pievienoti bikštumos vai, ja nē, to mainīgo un komandu aizvietojumi dod skaitļus vai virknes, kurām pašiem nav jāmaina. Tomēr, tā kā dažiem nesaistītiem izteicieniem ir nepieciešami divi aizvietošanas posmi, bytekoda kompilatoram jāizdod papildu norādījumi, lai apstrādātu šo situāciju. Visdārgākais kods ir nepieciešams nesaistītām izteiksmēm, kurās ir komandu aizvietojumi. Šie izteicieni jāievieš, ģenerējot jaunu kodu ikreiz, kad izteiksme tiek izpildīta.

Atslēgvārdi

aritmētika, boolean, salīdzināt, izteiksme, izplūdušais salīdzinājums

Svarīgs: Izmantojiet cilvēks komanda ( % cilvēks ), lai redzētu, kā komanda tiek izmantota jūsu konkrētajā datorā.