免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: cjaizss
打印 上一主题 下一主题

dc计算器简介 [复制链接]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
11 [报告]
发表于 2011-04-16 21:42 |只看该作者
寄存器栈的结构
--栈顶--
值A--------数组a(使用数字下标访问)
|
值B--------数组b(使用数字下标访问)
|
...
值--------数组(使用数字下标访问)
--栈底--
如此,s可以用来修改值A
l可以读取值a
S可以用在进栈,产生一层新的
值--------数组(使用数字下标访问)
值则是主栈当前栈顶,而数组则为空
L把值A--------数组a(使用数字下标访问)
整个出栈(当然不再存在了),并把值A进栈到主栈
:就是修改数组a
;就是读取数组a

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
12 [报告]
发表于 2011-04-16 21:44 |只看该作者
!命令
就是把!之后到行末的内容当成是一个shell命令执行,
解释器/bin/sh
所以里面/bin/sh所支持的一切方式都没问题

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
13 [报告]
发表于 2011-04-16 21:45 |只看该作者
!命令
就是把!之后到行末的内容当成是一个shell命令执行,
解释器/bin/sh
所以里面/bin/sh所支持的一切方式都没问题

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
14 [报告]
发表于 2011-04-16 21:46 |只看该作者
#命令
熟悉脚本的人都清楚,这是注释
这是GNU扩展
还有个用处就在于,可以这样写了
#!/usr/bin/dc -f
......

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
15 [报告]
发表于 2011-04-16 21:57 |只看该作者
进位制与精度

i 设置输入为n进制,n从主栈出栈所得,限制为最小2,最大16
o 设置输出为n进制,n从主栈出栈所得,限制为最小2,最大无限制
之所以i有最大限制,o没有,是在于输入的数必须紧密,而空格在dc中代表下一个命令了,而输出则往往用空格来隔开每个数
这个例子大家一看可能就明白了,用60进制打印十进制下的100
echo 60o100p | dc
01 40
01 40可以输出,但却不能这样输入作为一个数

I  将当前输入的进制数进栈到主栈
O 将当前输出的进制数进栈到主栈

k 设置小数点后的有效数字为n位,n从主栈出栈所得,最小为0
K 将当前有效数字位数进栈到主栈

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
16 [报告]
发表于 2011-04-16 22:02 |只看该作者
Z 先将主栈栈顶出栈,将当前栈顶的数的长度或者字符串的长度进栈
注意,如果是小数,小数点不算位数

echo '100.11 Z f' | dc
5

X 先将主栈栈顶出栈,如果是数,将其小数点后的位数进栈,如果是字符串,则将0进栈

z 将主栈的深度进栈

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
17 [报告]
发表于 2011-04-16 22:02 |只看该作者
本帖最后由 cjaizss 于 2011-04-16 22:06 编辑

Z 先将主栈栈顶出栈,将当前栈顶的数的长度或者字符串的长度进栈
注意,如果是小数,小数点不算位数

echo '100.11 Z f' | dc
5

X 先将主栈栈顶出栈,如果是数,将其小数点后的位数进栈,如果是字符串,则将0进栈

z 将主栈的当前深度进栈

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
18 [报告]
发表于 2011-04-16 22:17 |只看该作者
以下的部分,应当是属于程序的结构控制部分了,正是因为有以下这样的支持,dc才会实现一切的计算功能。
当然,先说下字符串,前面一直提到主栈里、寄存器里的元可以是字符串,但没提到字符串的书写格式
字符串的书写格式是两端方括号
[test]就表示test这个字符串
dc可以表示带有换行符的字符串无法表示方括号无法匹配的字符串
比如想表示 [][ 这样的字符串内容似乎没有办法,至少我没有发现有什么办法
后面的一切都与这个字符串是有关系的

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
19 [报告]
发表于 2011-04-16 22:35 |只看该作者
x 把主栈的栈顶弹出栈,然后执行,如果是数,那么就如同此命令为一个数一样,原样进栈(一出一进,栈没有任何改变)。
  但如果是字符串,那么就按命令执行
比如
echo '[5 6+]xp'|dc
11

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
20 [报告]
发表于 2011-04-16 22:53 |只看该作者
>R
!>R
<R
!<R
=R
!=R
以上6条为条件执行,先从主栈上出栈a,再出栈b,如果a与b的关系满足指定的关系,
(例如>R就是要满足a>b,我想这六个关系我就不用一一说明了,!>就是小于等于的意思)
则执行寄存器R(R也可以是别的寄存器)的当前栈顶内容,也就是我画的那个图里的值A
例子
echo '[[test]p] sr 1 2 >r'|dc
test
大家可以想想为什么会打印出test
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP