MATLAB程序设计语言基础
一、变量与常量
1.1 常见数据类型
1.1.1 数值型数据
应当意识到,数值型数据概念的提出是与符号型数据想对应的,matlab一般存储数据为双浮点数,就势必造成存储和运算的误差,比如将 $\frac{1}{3}$ 存为 0.333333,更不要提 0 的模糊表示了。如果是整数的话,其实也会造成运算的误差,比如 5/2=2 的取整操作。所以准确的来说,运用数值型数据只能得到近似解,而不能得到解析解。而用符号型数据可以避免这个漏洞。
首先要把分界分页的标识符调出来,这样方便排版,方法是“文件—选项—显示—显示所有格式标记”。
然后明晰一下分节和分页的概念,分节指的是一种文章逻辑上的分割,用这种分割方式分割出的部分,可以具有不同的页眉,页脚,尾注。而对于分页来讲,只是物理层面的分割,一般的应用于比如封面,摘要,目录,参考文献的分割。
分节一般有两种,下一节和连续,理论上来讲,下一节操作等价于连续分节符和分页符,但是在实际操作过程中,下一页分节符会造成空白页的出现,为了避免麻烦,还是用连续分节符为妙。在写冯如杯的论文的时候,分节操作应该在进行其他操作之前做,因为其他操作有可能依赖于分节操作,比如制作目录,参考文献,制作页码页眉等。在这种论文中,一般分为三节,第一节包括封面,中英文摘要,目录,主要原因是区分页码。第二节部分包括正文和参考文献,第三部分是致谢,主要原因是参考文献的尾注引用问题。
采用样式不是必须的,甚至在北航官方提供的文档中,都没有采用样式,而是对字体进行单独的设置。采用样式及一系列操作的原因其实代表着一种设计思想,即动态管理与自动化排版。采用这种思想可以使排版更加有效率,有条理,但是就我个人经验来说,因为冯如杯论文结构较为简单,而自动化排版学习较为复杂,要是时间紧,或者没师傅带,可以不学习这种知识,笔者自己就是因为学的半瓶子醋晃荡,导致了冯如杯差点没有参赛成功,而笔者的好朋友就采用了直接设置的方法,获得了一等奖好成绩。
这篇博文的本质不是一篇答案的汇总,HDLBits的题目组织形式是蕴含思想的(就像五三或者衡中的数学卷子),可以看到,虽然大部分前面的题目都谈不上难,但是如果一道一道的做下来,就会有体会,网站的搭建者是希望通过这组题目,来传递一种硬件设计思想。当然,更谦虚的说法是硬件设计思想基础。这篇博文的目的就是通过这些题目,来勉力阐述这种思想。
我写到了FSM章节的一半,其他的都写了,短期内应该是肝不动了,所以FSM的后面的答案就没有题解了,实在抱歉。
鸣谢名单在结尾放出。因为是无聊的刷题故事(不是为了写这篇文章,我打死都不会写这组题),所以鸣谢人员中只有很少在解决问题上为我提供帮助,但是倒是有很多人陪伴见证了这个无聊的故事,故一并鸣谢。
这篇文章还算成点的东西:
我个人规范是将所有的常量都用伪指令.eqv声明,其格式会在3.2中介绍。关键涉及一个问题,就是.eqv这样定义的是一个立即数,但是不是所有的指令都可以重载了立即数参数模式,所以更加规范的规范是每次使用被.eqv定义的常量之前,都加载立即数到一个寄存器(规定为$t7),然后使用这个寄存器,这就是常量的全部规范。
当然,还有几种方法,一种就是把常量直接保存在寄存器中,每次就是用这个寄存器就好了。但是有两点缺陷,一个是寄存器资源会被占用,以puzzle为例,我们需要一个寄存器存1,来做bool标记,需要一个寄存器存4,来用于控制dir的四个方向,那么就被占用了两个寄存器。另一个是容易bug,因为要时刻留心代码不修改规定寄存器。
还有一种是临到用的时候,在用li指令给某个寄存器一个值,但是这样也是容易造成寄存器混乱,还有一个缺陷是如果要修改常量的值,就会造成大量的修改工作。