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