Sayılar, ifadelerle ve deyimlerle birlikte kullanılırlar. Bu dil, etkileşimli bir çalışma ortamı olarak tasarlandığı için deyimler ve ifadeler de etkileşimli olarak işletilebilirler. bc'de bir 'main' işlevi kavramı yoktur. Bunun yerine kod, olduğu haliyle hemen yorumlanarak işletilir. (İşlevler, önce tanımlanırlar ve sonradan kullanılabilirler -ileride ele alınacaklar-).
En basit ifade bir 'sabit'tir. bc, ibase değişkeniyle belirtilen o anki girdi tabanını kullanarak sayıyı dahili onluk tabana çevirir. (Ancak, işlevler için bir istisna vardır.) ibase değişkeninin geçerli değerleri 2'den 16'ya kadardır. Bu aralığın dışında değerler atanırsa kendiliğinden 2 veya 16 olarak yeniden ayarlanır. Sayılar girilirken, 0-9 arası rakamlar ve A-F arası harfler ile kullanılabilir. (Not: A-F büyük harf olmalıdır. Çünkü, küçük harfler değişkenler için kullanılıyorlar.) Tek rakamlı sayılar, ibase ne olursa olsun, her zaman rakamın ifade ettiği değere sahip olurlar (örn, A=10)). bc çok rakamlı sayılarda, ibase değerine eşit veya daha büyük rakamları derhal ibase-1 tabanında ele alarak sayının değerini hesaplar. Bu FFF sayısını daima, girdi tabanındaki en büyük 3 haneli sayı yapar.
İfadeler, diğer yüksek-düzeyli dillerdekilere oldukça benzerler. bc'de sayılar için farklı türler olmadığı için karışık türler için kurallar yoktur. Bunun yerine, sadece ifadelerin bölüntüleri üzerine kurallar vardır. Her ifadenin bir bölüntüsü vardır. Bu, orijinal sayıların bölüntülerinden, gerçekleştirilen işlemden ve çoğu durumda da scale değişkeninin değerinden elde edilir. scale değişkeninin alabileceği değerler, 0 (sıfır) ile C'deki tamsayı türü ile ifade edilebilen tamsayı aralığındadır.
Aşağıdaki geçerli ifadelerin açıklamalarında "ifade" komple bir ifadeyi ve "değişken" ise sıradan bir değişkeni veya bir dizi değişkenini göstermektedir. Bir basit değişken
şeklinde ve bir dizi değişkeni ise aşağıdaki gibi belirtilir:
Özel olarak söz edilmediyse sonucun bölüntüsü, ilgili ifadelerin azami bölüntüsü olur.
- -ifade
Sonuç, ifade'nin negatifi olur.
- ++değişken
değişken'in değerine önce 'bir' eklenir ve yeni değer ifadenin sonucu olur.
- --değişken
değişken'in değeri önce 'bir' eksiltilir ve yeni değer ifadenin sonucu olur.
- değişken++
İfadenin sonucu değişkenin değerine göre hesaplanır, sonra değişken'in değeri 'bir' artırılır.
- değişken--
İfadenin sonucu değişkenin değerine göre hesaplanır, sonra değişken'in değeri 'bir' eksiltilir.
- ifade + ifade
Sonuç, iki ifade'nin toplamıdır.
- ifade - ifade
Sonuç, iki ifade'nin farkıdır.
- ifade * ifade
Sonuç, iki ifade'nin çarpımıdır.
- ifade / ifade
Sonuç, iki ifade'nin bölümüdür. Sonucun bölüntüsü scale değişkeninin değeridir.
- ifade % ifade
Sonuç, "kalan"ı verir ve şu şekilde hesaplanır. a%b'yi hesaplarken, ilk önce a/b scale haneli olarak hesaplanır. scale+scale(b) ve scale(a)'dan hangisi daha büyükse bu bölüntüye göre a-(a/b)*b ifadesi sonucu hesaplamak için kullanılır. Eğer scale 0'a eşitlenirse ve her iki ifade de tamsayı ise, bu ifade tamsayı kalan işlevidir.
- ifade ^ ifade
İfadenin sonucu, birincinin ikinciye göre üssüdür. İkinci ifade bir tamsayı olmalıdır. (Eğer ikinci ifade tamsayı değilse, önce ekrana bir uyarı gelir ve ifade tamsayı olacak şekilde kesilir, yani ikinci ifadenin tam kısmı alınır). Sonucun bölüntüsü ise, eğer üs negatif ise scale'dir. Üs pozitif ise scale(a^b) = min(scale(a)*b, max(scale, scale(a)))'dır. Unutulmamalıdır ki ifade^0 ifadesinin sonucu her zaman "1" olur.
- ( ifade )
Parantezler, ifadenin değeri bulunurken standart önceliği değiştirir ve parantez içine alınan ifade daha önce hesaplanır.
- değişken = ifade
İfadenin sonucu değişkene atanır.
- değişken <işleç>= ifade
Bu, "değişken = değişken <işleç> ifade" ile eşdeğerdir ancak bir farkla; değişken'in değeri sadece bir kere elde edilir. Eğer değişken bir dizi ise, işlemin bir kere yapılacağı gözden uzak tutulmamalıdır.
İlişkisel ifadeler (karşılaştırma ifadeleri), sonuçları her zaman 0 veya 1 olan özel ifadelerdir. 0, yanlış (false) ve 1, doğru (true) olarak yorumlanır. Bunlar herhangi bir ifade içerisinde yer alabilirler. (POSIX bc'de ise ilişkisel ifadeler sadece if, while ve for deyimlerinde kullanılabilir ve sadece bir tane ilişkisel sınama olabilir.) İlişkisel işleçler şunlardır:
- ifade1 < ifade2
Sonuç, eğer ifade1, ifade2'den küçükse 1 olur. Aksi halde 0 olur.
- ifade1 <= ifade2
Sonuç, eğer ifade1, ifade2'den küçük ya da eşitse 1 olur. Aksi halde 0 olur.
- ifade1 > ifade2
Sonuç, eğer ifade1, ifade2'den büyükse 1 olur. Aksi halde 0 olur.
- ifade1 >= ifade2
Sonuç, eğer ifade1, ifade2'den büyük ya da eşitse 1 olur. Aksi halde 0 olur.
- ifade1 == ifade2
Sonuç, eğer ifade1, ifade2'ye eşitse 1 olur. Aksi halde 0 olur.
- ifade1 == ifade2
Sonuç, eğer ifade1, ifade2'den farklıysa 1 olur. Aksi halde 0 olur.
bc'de mantıksal (boolean) işlemler de geçerlidir. (POSIX bc'de mantıksal işlemler yoktur.) Mantıksal işlemlerin sonucu, ilişkisel işlemlerde olduğu gibi, 0 (false) yada 1 (true) olmaktadır. Mantıksal işleçler şunlardır:
- !ifade
ifade 0 ise sonuç 1'dir. Aksi halde 0 olur.
- ifade && ifade
ifade'lerin ikiside sıfırdan farklıysa sonuç 1'dir. Aksi halde 0 olur.
- ifade || ifade
ifade'lerden biri sıfırdan farklıysa sonuç 1'dir. Aksi halde 0 olur.
İşleçlerin işlem öncelik sırası şöyledir (küçükten büyüğe):
|| işleci, önce sol taraf
&& işleci, önce sol taraf
! işleci, tarafsız
İlişkisel işleçler, önce sol taraf
Atama işleci, önce sağ taraf
+ and - işleci, önce sol taraf
*, / ve % işleci, önce sol taraf
^ işleci, önce sağ taraf
tek terimli - işleci
++ ve -- işleci
Bu önceliğin seçilmesinin nedeni, POSIX uyumlu bc yazılımlarının doğru çalışması içindir. Ancak, ilişkisel ve mantıksal işleçler, atama ifadelerinde kullanıldığında elverişsiz ve çok farklı bir durum ortaya çıkmaktadır. Aşağıdaki ifadeyi ele alalım:
C programcıları bu ifadeyi ele alırken, önce 3<5 (sonuç 1'dir) ifadesini gerçekleştirir, ardından sonucu "a" değişkenine atarlar. bc'de ise önce "a"ya 3 atanır ve ardından 5 ile karşılaştırma yapılır. Buna dikkat etmek gerekir. En iyisi, ilişkisel ve mantıksal işleçler ile atama işleci aynı ifadede kullanıldığında karmaşayı önlemek için parantezleri kullanmaktır.
bc'de desteklenen biraz daha özel ifadeler vardır. Bunlar, standart işlevler ve kullanıcı tanımlı işlevlerde, "
isim(parametreler)" şeklinde görülmektedirler. Ayrıntılı bilgi için
İŞLEVLER bölümündeki kullanıcı tanımlı işlevlere bakınız. Yerleşik işlevler şunlardır:
- length ( ifade )
length işlevinin değeri, ifade'deki anlamlı rakamların adedidir.
- read ( )
read işlevi (bu bir genişletmedir), nerede kullanıldığına bakılmaksızın, standart girdiden bir sayı okumak için kullanılır. Ancak, standart girdiden veri ve yazılım birlikte okunurken problemlere neden olabileceğinden dikkatli olmak gerekir. Bu işlevin en iyi kullanım şekli, asla kullanıcıdan kod girmeyi gerektiren yerlerde değil, evvelce geliştirilen bir yazılım için kullanıcıdan bir girdi bekleyen yerlerde kullanmaktır. read işlevinin değeri, standart girdiden okunan sayının ibase tabanındaki değeridir.
- scale ( ifade )
scale işlevinin değeri, ifade'denin sonucu olan sayıdaki ondalık hanelerin sayısıdır.
- sqrt ( ifade )
sqrt işlevinin değeri, ifade'nin kareköküdür. ifade'nin sonucu negatif bir sayı ise bir çalışma anı hatası üretilir.