明天初赛了,马上就要退役了QAQ。
总结了几个初赛必考知识点,做考试前的小复习。
但是看一圈,初赛更多考的是谁都不屑于去搞的什么“微软公司有哪些软件”之类的rand题、一些平常编码用不到的计算机知识题、以及占比很重的算法代码题。
当然rand题随心,算法代码题靠积累,所以这里讲几个计算机知识题的知识点。
注:还有啥的告诉俺,俺学学加进去。欢迎评论。
这里的考点主要是十进制数和补码的转化。
- 十进制转原码。
就是十进制转二进制。我常用的方法是短除法。即每次除以二(向下取整),直到为0,最后将余数反向输出。 如图:
留几道练习,答案在最末尾。
(5)10=?
(127)10=?
(258)10=?
拓展:二进制转十进制,就从末位开始,将第k位的数乘2^(k-1)并加入结果中。如: ( 1101 ) 2 =2^0 * 1 + 2^1 * 0 + 2^2 *1+ 2^3 * 1=13
(11011)2=?
(10100)2=?
(10001)2=?
- 十进制转补码与补码转十进制
为了表示正负,在二进制数前加上一个符号位,正为0负为1。
记住一条规律:原码是二进制数加符号位,反码是原码除符号位外逐位取反,补码是反码加一
记住这条规律,做题就没问题了。
拓展:为什么要有这些千奇百怪的东西呢?
计算机做运算时都是用二进制码运算的。如果是纯粹的同正负加法,二进制码就可以搞定。但是当出现一些减法运算时,就不可做了。于是我们引进补码。注意的是,计算机中一般以8位为一节。手动模拟一下补码加原码,你会发现,结果除了符号为以外有了九位数字并且后面八位都是0。而由于计算机存在溢出现象,所以第九位会被忽略,所以结果为0。于是加减运算就可以全部正确执行了。
这三种表达式,是运算式的不同表达顺序。而我们一般生活中所用的,就是中缀表达式。
中缀表达式转前缀、后缀表达式有两种做法:
- 栈
1)遇到数,就输出;
2)遇到左括号就压入栈;
3)遇到操作符,先把栈顶优先级小于当前符号的符号全弹出或弹到栈为空,再将当前符号压入栈;
4)遇到右括号,就将栈顶元素弹出直到遇到左括号或栈为空;
5)读入到末尾,将栈中元素依次弹出。
一般情况下我反正是不会用这种方法的,所以更推荐下面这种。
- 二叉树
从右往左依次找到运算级最小的符号,放在根,左边放到左子树右边放到右子树。最后得出的二叉树,先序遍历为前缀表达式,中序遍历为中缀表达式,后序遍历为后缀表达式。
要注意的是,先序遍历顺序为“根左右”,中序遍历为“左根右”,后序遍历为“左右根”。有一种简便记法:根在左中右,就是什么遍历。
后缀表达式求值:
从左往右遍历后缀表达式,遇到数字就压入栈,遇到符号就把栈顶两个元素取出计算然后将结果压回栈中。
习题:
中缀表达式转后缀表达式:
1.8+2-(3+2)-1
2.4-5*2+4/3
3.3+4-10^(3-3)
后缀表达式求值:
4. 8 6 - 8 + 5 4 - 1 + -
5. 2 2 4 1 * 2 / / +
6. 3 2 ^ 1 / 3 1 + 3 1 - - ^
还不会QAQ。日后补。
习题答案:
一. 1:101,1111111,100000010
2:27,20,17
二.1: 8 2 + 3 2 + - 1 -
2: 4 5 2 * - 4 3 / +
3: 3 4 + 10 3 3 - ^ -
4: 8 5: 3 6: 81
原文:https://www.cnblogs.com/Zikual/p/11703729.html