Következő: 15.10.9 UTASÍTÁSOK
Fel: 15.10 bc(1)
Előző: 15.10.7 MEGJEGYZÉS
  Index
A számokat kifejezésekkel és utasításokkal lehet manipulálni. Mivel a nyelvet
interaktívra készítették, az utasítások és a kifejezések rögtön végrehajtódnak.
Nincs ,,fő'' program (main függvény). A kód olyan sorrendben hajtódik végre,
ahogy a bc beolvassa. (A függvények, később kerülnek leírásra, a
beolvasás sorrendjében kerülnek definiálásra.)
Egy egyszerű kifejezés egy konstans. A bc a konstanst az ibase
változóban megadott bemeneti számrendszer szerint decimális számmá
konvertálja. (Kivétel a függvényeknél.) Az ibase érvényes értékei 2-től 16-ig
terjednek. Ezen a határon túli értéket megadva az ibase változónak, a változó
értéke 2 vagy 16 lesz. A bemenő számok a 0-9-ig és az A-F-ig terjedő
karaktereket tartalmazhatják. (Megjegyzés: Nagybetűknek kell lenniük. A
kisbetűk a változóknak vannak fenntartva.) Az egy számjegyű számoknak mindíg a
számjegy az értéke, az ibase változótól függetlenül (pl.: A = 10). A több
számjegyű számoknál a bc az ibase-nél nagyobb számjegyeket bc
-1-re cseréli. Ezáltal, a FFF mindíg a lehető legnagyobb háromjegyű számot
jelenti.
A teljes kifejezések hasonlóak a többi magas szintű nyelvben levőkhöz. Mivel
csak egyetlen típusú szám van, nincs szabály a típusok keverésének kezelésére.
Minden kifejezésnek van egy pontossága. Ez az eredeti számokból, az elvégzett
műveletekból és még sok egyébből tevődik össze, az értéke a scale változóban
található. Ezen változó legális értékei a 0-tól a C nyelvben egész számnak
megadható legnagyobb értékig terjednek.
Itt következik a legális kifejezések leírása, az ,,expr'' a teljes kifejezésre,
a ,,var'' pedig egy egyszerű, vagy egy tömb változóra vonatkozik. Egy egyszerű
változóra a name míg egy tömbre a name[expr] leírásával hivatkozhatunk. Hacsak
másként nem specifikáljuk, az eredmény pontossága a kifejezések pontosságának a
maximuma lesz.
- -expr
- Az eredmény a kifejezés negáltja.
- ++ var
- A változó értéke eggyel nő, és az eredmény a változó új értéke
lesz.
- - var
- A változó értéke eggyel csökken, és az eredmény a változó új
értéke lesz.
var++ A kifejezés eredménye a változó eredeti értéke, majd a változó értéke
nő eggyel.
- var-
- A kifejezés eredménye a változó eredeti értéke, majd a változó
értéke csökken eggyel.
- expr + expr
- Az eredmény a két kifejezés összege.
- expr - expr
- Az eredmény a két kifejezés különbsége.
- expr * expr
- Az eredmény a két kifejezés szorzata.
- expr / expr
- Az eredmény a két kifejezés hányadosa. Az eredmény
pontosságát a scale változó értéke határozza meg.
- expr % expr
- Az eredmény a ,,maradék'', amely a következőképpen kerül
kiszámolásra. Az a%b kiszámolásához először, kiszámolásra kerül az a/b, scale
számjegyre. Az eredmény a következőképpen adódik: a-(a/b)*b, a pontossága a
scale+scale(b) és scale(a) közül a nagyobb lesz. Ha a scale egyenlő nullával,
vagy mindkét kifejezés egész, a maradék is egész lesz.
- expr ^ expr
- Az eredmény az első kifejezés a másodikra emelve. A
második kifejezésnek egésznek kell lennie. (Ha a második kifejezés nem egész,
egy figyelmeztetés generálódik, és az érték egész értékre csonkolódik.) Az
eredmény pontossága scale lesz, ha a kitevő negatív. Ha a kitevő pozitív,az
eredmény pontossága az első kifejezés pontosságának, és a kitevő értékének a
szorzata és - az első kifejezés és a scale változó értéke közül a nagyobb -
közül a kisebb lesz. (pl. scale(a^b) = min(scale(a)*b, max( scale,
scale(a))).) Megjegyezendő, hogy az expr^0 mindig 1 értékkel tér vissza.
- ( expr )
- Ez megváltoztatja a kifejezés kiértékelésének standard
precedenciáját.
- var=expr
- A változó értéke a kifejezés lesz.
- var<op>= expr
- Ez ekvivalens a ,,var = var <op> expr'' kifejezéssel,
azzal a kivétellel, hogy a ,,var'' rész csak egyszer értékelődik ki. Ez akkor
okozhat különbséget, ha a ,,var'' egy tömb.
A relációs kifejezések speciális kifejezésfajták, amelyek mindig 0-t, vagy 1-et
adnak vissza, 0-át, ha a reláció hamis, és 1-et, ha igaz. Ezek bármilyen
legális kifejezésben megjelenhetnek. (A bc POSIX változatában, hogy a
relációs kifejezések csak if, while és for utasításokban szerepelhetnek,
illetve csak egy tesztelésük lehetséges.) A relációs operátorok a következők:
- expr1 < expr2
- Az eredmény 1, ha az expr1 kisebb, mint az expr2.
- expr1 <= expr2
- Az eredmény 1, ha az expr1 kisebb, vagy egyenlő, mint az
expr2.
- expr1 > expr2
- Az eredmény 1, ha az expr1 nagyobb, mint az expr2.
- expr1 >= expr2
- Az eredmény 1, ha az expr1 nagyobb, vagy egyenlő, mint
az expr2.
- expr1 == expr2
- Az eredmény 1, ha az expr1 egyenlő az expr2vel.
- expr1 != expr2
- Az eredmény 1, ha az expr1 nem egyenlő az expr2vel.
A boolean műveletek is legálisak. ( A POSIX bc-ben nincsenek boolean
műveletek.) Minden boolean műveletnek az értéke 0, vagy 1 (hamis, vagy igaz),
mint a relációs műveleteknél. A boolean műveletek a következőek:
- !expr
- Az eredmény 1, ha a kifejezés 0.
- expr && expr
- Az eredmény 1, ha mindkét kifejezés nem 0.
- expr || expr
- Az eredmény 1, ha bármelyik kifejezés nem 0.
A kifejezések precedenciája a következő (alacsonytól a magas felé):
- || operátor
- balról asszociatív
- && operátor
- balról asszociatív
- ! operátor
- nem asszociatív
- Relációs operátorok
- balról asszociatív
- Értékadó operátor
- jobbról asszociatív
- + és-operátorok
- balról associative
- *, / és % operátorok
- balról asszociatív
- ^ operátor
- jobbról asszociatív
- unáris - operátor
- nem asszociatív
- ++ és - operátorok
- nem asszociatív
Ez a precedencia úgy van megválasztva, hogy a POSIX bc alá írt programok is
korrekten fussanak. Emiatt a relációs és logikai operátorokat az értékadó
operátoroknál néha szokatlan eredmény is kijöhet. Lásd a következő
kifejezést:
a=3<5
A legtöbb C programozó ezt úgy értelmezi, hogy a ,,3 < 5'' (az értéke 1) kerül
az ,,a'' változóba. A bc itt a következőt csinálja, hozzárendeli a 3-at
az ,,a'' változóhoz, majd a 3-at összehasonlítja az 5-tel. A legjobb, ha
értékadó operátort használsz relációs, és logikai operátorokkal, akkor
használsz zárójeleket.
Van néhány egyéb speciális kifejezés, amelyet még a bc nyújt. Ezek a
felhasználó által definiálható függvények, és a standard függvények hívása.
Ezek a következő alakban jelennek meg: name(parameters)
A függvényekhez lásd még a felhasználó által definiált függvények fejezetet. A
standard függvények a következőek:
- length ( expression )
- A length függvény értéke a kifejezésben megadott
szám értékes jegyeinek száma.
- read ( )
- A read függvény (kiterjesztés) beolvas egy számot a standard
bemenetről, függetlenül attól, hogy a függvényhol található. Figyelmeztetés:
ez problémát okozhat, ha mind a program, mind az adatok a standard bementről
jönnek. A legjobb, ha ezt a függvényt csak előre megírt programoknál
használjuk, amely adatokat kér a felhasználótól, de nem engedi meg, hogy a
felhasználó program kódot is beírjon. A read függvény értéke a standard
bemenetről beolvasott szám értéke, az ibase változó értékét, mint számrendszert
használva a konverzió alapjául.
- scale ( expression )
- A scale függvény értéke a kifejezés tizedespont
mögött szereplő számjegyeinek száma.
- sqrt ( expression )
- Az sqrt függvény értéke a kifejezés értékének a
négyzetgyökével egyenlő. Ha a kifejezés negatív, egy futási hiba generálódik.
Következő: 15.10.9 UTASÍTÁSOK
Fel: 15.10 bc(1)
Előző: 15.10.7 MEGJEGYZÉS
  Index
1999-09-17