20145221 《信息安全系统设计基础》第4周学习总结
内容导读
- 在第3周我们学习了信息的表示和处理,其实有很多知识我们在之前的课程中都已接触过:《计算机导论》、《HDL数字逻辑电路》、《C语言程序设计》、《Java程序设计》、《汇编语言程序设计》。只不过不是很系统,也不是很深刻,只知道是什么不知道为什么。通过这一章节的学习,从操作系统出发,了解了内存中的存储读取机制,以及各种标准对信息的表示与要求,更深层次的了解到了信息在计算机中的表示。
- 而这次第4周利用十一假期时间拿课后练习题试试手
教材课后习题小试牛刀
位级整数编码规则
- 假设
- 整数用补码形式表示
- 有符号数的右移是算术右移
- 数据类型int是w位长的。对于某些题目,会给定w的值,但是在其他情况下,只要w是8的整数倍,你的代码应该能工作。你可以用
sizeof(int)<<3
来计算w
- 禁止使用
- 条件语句(
if
或者? :
)、循环、分支语句、函数调用和宏调用
- 除法、模运算和乘法
- 相对比较运算(<、>、<=和>=)
- 允许的运算
- 所有的位级和逻辑运算
- 左移和右移,但是位移的数量只能在0和w-1之间
- 加法和减法
- 相等(==)和不相等(!=)测试
- 整型常数
INT_MIN
和INT_MAX
- 强制类型转换,无论是显示的还是隐式的
课后习题2.65
- 题目要求
- 根据英语提示可知,返回1当x包含偶数个1;否则为0;
- 遵循位级整数编码规则,代码最多只能包含 12个算术运算、位运算和逻辑运算。
- 题目思路:
- 首先最先想到的是每一位一个一个异或,最后结果为1则包含奇数个1,反之包含偶数个1。但根据题目要求2,显然无法满足要求,一共有32位,照此肯定不止12个位运算,另外32数字较大,最好用循环实现,但级整数编码规则又要求不可有循环语句,故而这条思路应该果断放弃。
- 在《HDL数字逻辑设计》这门课上,有一题,如果要求一个8位宽线路的通路个数是奇数还是偶数,应该怎么求。一种是用归约亦或运算符,还有一种是老师提及的一种思路,类似折半的思想。(此处已默认x为32位)即取x,将其右移16位后与原x按位异或,这样得到的新x右边16位就是原x左边16位和原x右边16位按位异或的结果,接下来右移8位……,直至最后1位。我们取值要取最后x值的最低位。
- 根据题目要求,输出应与我们的异或结果相反,加上非逻辑预算就行。
- 代码实现:
- 运行截图:
课后习题2.69
- 题目要求
- 根据题目要求,可知这题是一个求移位的运算,移位大小在该区间内:
[0,32)
- 也要遵循级整数编码规则,并注意
n=0
的情况
- 题目思路
- 首先C语言中有移位运算的操作符,其中右移符号是
>>
- 输入输出最好直接以16进制显示,这样当移位的位数为4的整数倍时,可以直观的检查结果的正确性
- 移出的数字可以通过反向移
w-n
位的结果与右移结果相“位或”得到
- 总体来说实现思路是较为直观的
- 代码实现:
- 运行截图:
代码统计&托管截图
其他(感悟、思考等,可选)
- 这周因为老师没有额外布置学习任务,所以自己利用假期时间找了找课后的几道习题练习练习,也是加深对理论知识的理解,对位操作的认识。
学习进度条
|
代码行数(新增/累积) |
博客量(新增/累积) |
学习时间(新增/累积) |
重要成长 |
目标 |
5000行 |
30篇 |
400小时 |
|
第一周 |
200/200 |
2/2 |
20/20 |
学习了Linux常用命令 |
第二周 |
79/279 |
1/3 |
30/50 |
了解vim,gcc,gdb基本操作 |
第三周 |
182/461 |
1/4 |
25/75 |
更深层次了解信息处理 |
第四周 |
36/497 |
2/6 |
3/78 |
第二章知识简单的运用 |
参考资料
posted @
2016-10-15 22:36
20145221高其
阅读(
322)
评论()
编辑
收藏
举报