20145221 《信息安全系统设计基础》第4周学习总结

20145221 《信息安全系统设计基础》第4周学习总结

内容导读

  • 在第3周我们学习了信息的表示和处理,其实有很多知识我们在之前的课程中都已接触过:《计算机导论》、《HDL数字逻辑电路》、《C语言程序设计》、《Java程序设计》、《汇编语言程序设计》。只不过不是很系统,也不是很深刻,只知道是什么不知道为什么。通过这一章节的学习,从操作系统出发,了解了内存中的存储读取机制,以及各种标准对信息的表示与要求,更深层次的了解到了信息在计算机中的表示。
  • 而这次第4周利用十一假期时间拿课后练习题试试手

教材课后习题小试牛刀

位级整数编码规则

  • 假设
    • 整数用补码形式表示
    • 有符号数的右移是算术右移
    • 数据类型int是w位长的。对于某些题目,会给定w的值,但是在其他情况下,只要w是8的整数倍,你的代码应该能工作。你可以用sizeof(int)<<3来计算w
  • 禁止使用
    • 条件语句(if或者? :)、循环、分支语句、函数调用和宏调用
    • 除法、模运算和乘法
    • 相对比较运算(<、>、<=和>=)
  • 允许的运算
    • 所有的位级和逻辑运算
    • 左移和右移,但是位移的数量只能在0和w-1之间
    • 加法和减法
    • 相等(==)和不相等(!=)测试
    • 整型常数INT_MININT_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)  评论(2编辑  收藏  举报