歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux下的dc計算器

Linux下的dc計算器

日期:2017/3/1 9:58:38   编辑:Linux編程

dc采用逆波蘭式計算表達式,計算過程是對棧的手動維護。逆波蘭式看起來很別扭,但跑起來當然是很有效率的。

亂七八糟的東西就不說了,直接切入script正題

負號在dc裡用_表示而非-,因為-是二元運算符“減號”

打印類命令:

p :打印棧頂元素並換行

n : 打印棧頂元素並將其彈出棧,完畢後不換行

P : putchar ( int(棧頂元素) % 256) 並彈棧頂,不換行

f : 從棧頂至棧底打印棧中所有值,每個一行

算數運算符:

+ : 依次彈出w1與w2,將w2+w1壓棧。精度為結果值精度

- : 依次彈出w1與w2,將w2-w1壓棧

* : 依次彈出w1與w2,將w2*w1壓棧。精度為結果值精度與precision中較大值

/ : 依次彈出w1與w2,將w2/w1壓棧。精度為precision

% : 依次彈出w1與w2,將w2-w2/w1*w1壓棧

~ : 依次彈出w1與w2,依次將w2/w1與w2%w1壓棧

^ : 依次彈出w1與w2,將w2^((int)w1)壓棧。精度為w2精度與precision中較大值

| : 依次彈出w1 w2與w3,將 w3 ^ ((int)w2) (mod w1) 壓棧。w1 w3 需為整數

v : 彈出w1,將sqrt(v)壓棧。精度為precision

棧操作:

c : 清空棧

d : 將棧頂元素復制並壓棧

r : 交換棧頂兩元素 XXX

寄存器操作:

dc提供至少256個寄存器,分別用256個字符表示。一般用'a'..'z',不夠可以用123ABC!@#,再不夠就用\x00..\xff

除了主棧外,每個寄存器都是獨立的棧,寄存器棧頂的值被稱為這個寄存器的值

sr : 彈出主棧頂元素w1,若r棧為空,則將w1壓入r棧,否則將r棧頂元素改為w1

lr : 將r寄存器的值壓入主棧

Sr : 彈出主棧頂元素w1,壓入r棧

Lr : 彈出r棧頂元素w1並將其壓入主棧

Copyright © Linux教程網 All Rights Reserved