目录
一、计算机硬件基础(流水线-吞吐率)
流水线有取值、分析和执行三个阶段,就像是工厂每个人分工不同,每个人都有自己的唯一枯燥工作,提高工厂生产的效率,但是也加大的人工。
流水线公式:执行一条指令时间+ (指令条数-1)*流水线周期
为什么要减去一条指令呢?因为可能在三个阶段中时间不同,例如取值为5,分析为2,执行也为5,这样进行加工时取值完后进行分析,分析比较快,到达最后一次指令会缩短3,其他指令会空闲。
小试牛刀:例题
某指令流水线由5段组成,各段所需时间如图,连续输入10条指令时的吞吐率为?
解析:这是执行一条指令,总时间为8;共执行10条,所以是10-1;根据上图一条指令中最高的周期数是3;
所以连续10条指令吞吐率为:8+(10-1)*3=35
原码、反码、补码、移码
正数的反码、补码均为本身,移码在正数补码的基础上符号位取反
负数的原码:是正数原码符号位取反 |
负数的反码:负数原码基础上符号位不变,其他位取反 |
负数的补码:负数反码的基础上进一位 |
负数的移码:负数补码的基础上符号位取反 |
原码 | 反码 | 补码 | 移码 | |
正 | 0000 0000 | 0000 0000 | 0000 0000 | 1000 0000 |
负 | 1000 0000 | 1111 1111 | 0000 0000 | 1000 0000 |
二、程序语言和语言处理程序(前后中缀表达式)
计算中缀表达式”可以称得上是一个特别经典的关于栈的算法题,几乎在所有数据结构教材中都会涉及,而且很多公司面试或者笔试的时候都会把这道题作为一个考察点。可以说,这是一道必须要掌握的算法题。
通常会给定一个中缀表达式,让我们转化为前缀或后缀表达式,在转换过程中画出两列栈,一列存数字一列存符号。
重点:存符号的一列栈两个()相遇要抵消掉,把符号放到数字栈中。
前缀表达式:将给定中缀表达式从右往左入栈,得到表达式后要出栈,也就是把得到的表达式反过来。
后缀表达式:将给定中缀表达式从左往右入栈,不用出栈,得到的是后缀表达式。
小试牛刀:公式(a+b)*(a-b)
一、转换为前缀表达式(数字1-13为步骤):
数字栈 | 符号栈 |
2.b | 1.) |
4.ba | 3.)- |
6.ba- | 5.要存(但已有),与之抵消,在将 - 存到数字栈 |
ba- | 7.* |
9.ba-b | 8.*) |
11.ba-ba | 10.*)+ |
13.ba-ba+* | 12.要存(但已有),与之抵消,再将*+存到数字栈 |
最后得到的表达式为ba-ba+*,但不要忘了要在进行出栈,也就是把得到的表达式倒叙拿出,最后前缀表达式为:*+ab-ab
二、转换为后缀表达式
从左往右以此入栈,得到结果不用出栈,最后得到的结果为:ab+ab-* 大家根据上方的前缀表达式练习一下,是否得到的是这个结果。
乔姆斯基文法
G=(Vn,Vt,P,S)
Vn非终结符,Vt终结符,P产生式,S起始符。
类型 | 说明(α∈(VN∪VT)+,β∈(VN∪VT)* ) | |
0型文法 | α→β | α中不包含ε |
1型文法 | |α|<=|β| | α的长度必须小于等于β的长度 |
2型文法 | α→β | α∈Vn, β∈(VN∪VT)* |
3型文法 | α→β | 左线性文法 终结符在左,或β为ε:A→Ba ,A→ε 右线性文法 终结符在右,或β为ε:A→aB ,A→ε |