zoukankan      html  css  js  c++  java
  • 20145237 《信息安全系统设计基础》第3周学习总结

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

    教材学习内容总结

    计算机中三种最重要的数字表示

    无符号数:基于传统二进制表示法,表示大于或等于0的数字
    补码:编码是表示有符号数的最常见方式
    浮点数:表示实数的科学计数法的以2为基数的版本
    溢出:计算机用有限数量的位来对应一个数字编码,因此存在结果太大无法表示的状况,即溢出

    信息存储

    字:
    每个计算机都有一个字长,指明整数和指针数据的标称大小。因为虚拟地址是以这样的一个字来编码的,所以字长最重要的系统参数就是虚拟地址空间的最大大小。
    对于一个字长为w位的机器而言,虚拟地址的范围为0~2w-1,程序最多访问2w字节。
    使用C99特性:当没有-m32或-m64参数时,一般情况下会生成跟操作系统位数一致的代码;gcc -m32可以在64位机上(比如实验楼的环境)生成32位的代码
    字节顺序:字节顺序是网络编程的基础,是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有小端、大端两种字节顺序。
    小端法:低字节数据存放在内存低地址处,高字节数据存放在内存高地址处。
    大端法:高字节数据存放在低地址处,低字节数据存放在高地址处。教材学习中的问题和解决过程

    布尔代数

    逻辑运算

    结果是1或0

    所有逻辑运算都可以用与、或、非表达(最大式、最小式)而与或非可以用“与非”或“或非”表达,所以,只要一个与非门,就可以完成所有的逻辑运算。

    逻辑与(&&) 遇0为0;
    逻辑或(||) 遇1为1;
    逻辑非 遇0为1,遇1为0;
    位运算

    结果是位向量

    按位与(&) 二进制每一位遇0为0;
    按位或(|) 二进制每一位遇1为1;
    按位异或(^) 00=0,01=1,10=1,11=0;
    按位取反(~) 二进制每一位取反。
    掩码运算

    掩码是位运算的重要应用,这里掩码是一个特定位模式,表示从一个字中选择一个位的集合。对特定位可以置一,可以清零。

    逻辑运算与掩码运算

    逻辑运算结果是1或0,位运算结果是位向量

    如果对第一个参数求值就能确定表达式的结果,逻辑运算符就不会对第二个参数求值。

    p20: 三种数字:无符号数、有符号数(2进制补码)、浮点数
    无符号数:基于传统二进制表示法,表示大于或者等于零的数字。
    补码:表示有符号整数的最常见方式
    浮点数:表示实数的科学计数法的以二为基数的版本。

    p22: 二进制、八进制、十进制、十六进制进制转换(方法:使用二进制作中间结果)
    十六进制:以0x或0X开头表示,字符A-F可大写、可小写、也可混用。

    p25: gcc -m32 可以在64位机上(比如实验楼的环境)生成32位的代码
    当没有-m32或-m64参数时,一般情况下会生成跟操作系统位数一致的代码

    p26: 字节顺序是网络编程的基础,记住小端是“高对高、低对低”,大端与之相反就可以了。注:小端法——指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处。
    大端法——是高字节数据存放在低地址处,低字节数据存放在高地址处

    p32: 能区分逻辑运算(结果是1或0)和位运算(结果是位向量),所有逻辑运算都可以用与、或、非表达(最大式、最小式),而与或非可以用“与非”或“或非”表达,所以,只要一个与非门,就可以完成所有的逻辑运算。

    p33: 掩码是位运算的重要应用,对特定位可以置一,可以清零
    p39: 补码的利用寄存器的长度是固定的特性简化数学运算。

    正数的补码=原码
    负数的补码=原码各位取反再加1
    p44: 有符号数和无符号数的转换

    强制类型转换的结果保持位值不变,只是改变了解释这些位的方式。即:这些位上的值不变,但是由于最高有效位的权重发生变化,从而导致结果发生改变。
    处理同样字长的有、无符号数之间相互转换的规则:数值可能会变,但是位模式不变。(底层的位表示保持不变)

    p48: 怎么样让负数等于正数?

    在负数x后加上U,可以使其转换为(2^w+x)
    p49: 0扩展和符号扩展

    零扩展:多用于无符号数转换为一个更大的数据类型。只需在开头加上0即可。
    符号扩展:多用于补码数字转换。最高有效位是什么,就添加什么。
    p52: 深入思考一下代码和结果

    length=0时会出现存储器错误,这是因为参数length是无符号的,计算0-1将进行无符号运算,等价于模数加法,结果得到UMax。因为任何数都是小于等于UMax的,所以<=比较总是为真,代码将访问数组a的非法元素。
    解决办法:1.将length声明为int类型 2.将for循环测试条件改为i>length

    代码调试中的问题和解决过程

    p28代码刚开始运行时没有成功,原因是没有主函数,添加主函数后运行成功,以下是结果。

    作业56

    本周代码托管截图

  • 相关阅读:
    编程之美 2014资格赛 格格取数
    ios游戏开发--cocos2d学习(1)
    ios开发中常用的也是最基本的mysql语句
    无限树形结构的数据库表设计
    认真的辞职
    几种JavaScript富应用MVC MVVM框架
    javascript创建对象和属性的几种方式
    webresource.axd文件的配置及使用
    ITextSharp用来生成 PDF 的一个组件
    flexpaper 开源轻量级的在浏览器上显示各种文档的组件
  • 原文地址:https://www.cnblogs.com/20145237fhn/p/5928238.html
Copyright © 2011-2022 走看看