Linux下的dc计算器


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并将其压入主栈

  • 1
  • 2
  • 下一页

相关内容