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

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

    教材学习内容总结

    信息存储

    • 字节是最小的可寻址的存储器单位。
    • 机器级程序将存储器视为一个非常大的字节数组,称为虚拟存储器
    • 存储器的每个字节都能由唯一的数字来标识,称为地址
    • 十六进制表示法:若位的总数不是4的倍数,最左边的一组可以少于4位,前面用0补足。
    • 字长指明整数和指针数据的标称大小。
    • 虚拟地址空间的大小由字长决定,字长决定的最重要的系统参数就是虚拟地址空间的最大大小。对于一个字长为w位的机器而言,虚拟地址的范围为0-2w-1,程序最多访问2w个字节。
    • 程序可移植性的一方面是使程序对不同数据类型的确切大小不敏感。
    • 对于跨越多字节的程序对象,必须建立两个规则:(1)对象的地址是什么(2)在存储器中这些字节如何排列。
    • 最低有效字节在最前面的方式称为小端法,最高有效字节在最前面的方式称为大端法。
    • 字节顺序可见的三种情况:(1)网络应用程序代码编写时必须遵循已建立的关于字节顺序的规则;(2)由反汇编器生成(反汇编器是确定可执行文件所表示的指令序列的工具);(3)编写规避正常的类型系统的程序时,可以使用强制类型转换来允许一种数据类型引用一个对象。
    • 布尔代数是研究逻辑推理的基本原则,通过布尔代数进行集合运算可以获取到不同集合之间的交集、并集或补集,进行逻辑运算可以对不同集合进行与、或、非。
    • 位向量应用于表示有限集合。
    • C语言的一个很有用的特性就是它支持按位布尔运算。
    • C语言中的逻辑运算:|| OR 或;&& AND 与;! NOT 非。
    • 逻辑运算符和对应的位运算之间的重要区别是:逻辑运算认为,所有非零参数都为TRUE,参数0为FALSE,返回值分别为1和0;如果对第一个参数求值就能确定表达式的结果,那么就不会对第二个参数求值。
    • 一般而言,机器支持两种形式的右移:逻辑右移和算术右移。逻辑右移在左端补k个0,得到的结果是[0,…,0,xn-1,xn-2,…,xk]。算术右移是在左端补k个最高有效位的值,得到的结果是[xn-1,…,xn-1,xn-1,xn-2,…,xk]。

    整数表示

    • 无符号数的编码:假设一个整数数据类型有w位。我们可以将位向量写成x→,表示整个向量,或者写成[xw-1 ,xw-2,…,x0],表示向量中的每一位。把x→看做一个二进制表示的数,就获得了x→的无符号表示。
    • 无符号二进制有一个很重要的属性,就是每个介于0~2^w-1之间的整数都有唯一一个w为的值编码,函数为一个双射。
    • 补码编码最常见的有符号数的计算机表示方式就是补码形式。在这个定义中,将字的最高有效位解释为负权。所能表示的数值范围[-2(w-1)~2(w-1)-1],在可表示的范围内每个数字 都有一个唯一的w位的补码编码,函数为一个双射。
      注意:(1)补码的利用寄存器的长度是固定的特性简化数学运算。(2)补码的范围是不对称的。(3)最大的无符号数值刚好比补码的最大值的两倍大一点:UMaxw = 2 TMaxw + 1。补码表示中所有表示负数的位模式在无符号表示中都变成了正数。
    • 反码除了最高有效位的权是-(2w-1-1)而不是-2w-1,它和补码是一样的.
    • 原码最高有效位是符号位用来确定剩下的位应该取负权还是正权。
    • C语言允许有符号数与无符号数之间的转换,转换的原则是底层的位表示保持不变。
    • 零扩展将一个无符号数转换为一个更大的数据类型,只需要简单地在表示的开头添加0。
    • 符号扩展将一个补码数字转换为一个更大的数据类型,规则是在表示中添加最高有效位的值的副本。由此可知,如果原始值的位表示为[xw-1,xw-2,…,x0],那么扩展后的表示就为[xw-1,…,xw-1,xw-1,xw-2,…,x0]。
    • 截断数字将一个w位的数x=[xw-1 ,xw-2,…,x0]截断为一个k位的数字时,会丢弃高w-k位,得到一个位向量[xk-1 ,xk-2,…,x0],截断一个数字可能会改变他的值——溢出的一种形式。
    • 有符号数到无符号数的隐式强制类型转换导致了某些非直观的行为。而这些非直观的特性经常导致程序错误,并且这种包含隐式强制类型转换细微差别的错误很难被发现。因为这种强制类型转换是在代码中没有明确指示的情况下发生的,程序员经常忽视了它的影响。

    整数运算

    • 无符号加法考虑两个非负整数x和y,满足0≤x, y≤2w-1。每个数都能表示为w位无符号数字。然而,如果计算它们的和,我们就有一个可能的范围0≤x + y≤2w+1-2。表示这个和可能需要w + 1位。这种持续的“字长膨胀”意味着,要想完整地表示算术运算的结果,要对字长做限制。无符号运算可以被视为一种模运算形式。无符号加法等价于计算和模上2w。可以通过简单的丢弃x + y的w + 1位表示的最高位,来计算这个数值。
    • 溢出是指完整的整数结果不能放到数据类型的总长限制中去。
    • 无符号乘法范围在0≤x, y≤ 2w-1内的整数x和y可以表示为w位的无符号数,但是它们的乘积x · y的取值范围为0到(2w-1)2 = 22w-2w+1+1之间。这可能需要2w位来表示。不过,C语言中的无符号乘法被定义为产生w位的值,就是2w位的整数乘积的低w位表示的值。可以看作等价于计算乘积模2w。
    • 乘常数编译器使用了一项重要的优化,试着用移位和加法运算的组合来代替乘以常数因子的乘法。将整数拆成2的幂相加,再利用移位进行计算(左移),最后将结果相加。同理,对于非负数来说,算术右移k位与除以2^k是一样的。

    浮点数

    IEEE浮点表示

    IEEE浮点标准用V = (-1)^s × M × 2^E的形式来表示一个数:

    • 符号s决定这个数是负数(s=1)还是正数(s=0),而对于数值0的符号位解释作为特殊情况处理。

    • 尾数M是一个二进制小数,它的范围是1~2-ε,或者是0~1-ε。

    • 阶码E的作用是对浮点数加权,这个权重是2的E次幂(可能是负数)。
      将浮点数的位表示划分为三个字段,分别对这些值进行编码:

    • 一个单独的符号位s直接编码符号s。

    • k位的阶码字段exp = ek-1…e1e0编码阶码E。

    • n位小数字段frac = fn-1…f1 f0编码尾数M,但是编码出来的值也依赖于阶码字段的值是否等于0。
      给定了位表示,根据exp的值,被编码的值可以分为以下三种情况:

    • 情况1:规格化的值
      当exp的位模式既不全为0(数值0),也不全为1(单精度数值为255,双精度数值为2047)时,都属于这类情况。在这种情况中,阶码字段被解释为以偏置(biased)形式表示的有符号整数。也就是说,阶码的值是E = e-Bias,其中e是无符号数,其位表示为ek-1…e1e0,而Bias是一个等于2k-1-1(单精度是127,双精度是1023)的偏置值。由此产生指数的取值范围,对于单精度是-126~+127,而对于双精度是-1022~+1023。

    • 情况2:非规格化的值
      当阶码域为全0时,所表示的数就是非规格化形式。在这种情况下,阶码值是E = 1 - Bias,而尾数的值是M = f,也就是小数字段的值,不包含隐含的开头的1。非规格化值要这样设置偏置值的原因是使阶码值为1-Bias而不是简单的-Bias似乎是违反直觉的。我们将很快看到,这种方式提供了一种从非规格化值平滑转换到规格化值的方法。
      非规格化数有两个用途:首先,它们提供了一种表示数值0的方法,因为使用规格化数,我们必须总是使M≥1,因此我们就不能表示0。另外一个功能是表示那些非常接近于0.0的数。它们提供了一种属性,称为逐渐溢出,其中,可能的数值分布均匀地接近于0.0。

    • 情况3:特殊值
      当指阶码全为1的时候出现的。当小数域全为0时,得到的值表示无穷,当s = 0 时是+∞,或者当 s = 1时是-∞。当我们把两个非常大的数相乘,或者除以零时,无穷能够表示溢出的结果。

    • 舍入因为表示方法限制了浮点数的范围和精度,浮点运算只能近似地表示实数运算。因此,对于值x,我们一般想用一种系统的方法,能够找到“最接近的”匹配值x',它可以用期望的浮点形式表示出来。

    • IEEE浮点格式定义了四种不同的舍入方式。默认的方法是找到最接近的匹配,而其他三种可用于计算上界和下界。其他三种方式产生实际值的确界。这些方法在一些数字应用中是很有用的。向零舍入方式把正数向下舍入,把负数向上舍入,得到值x^,使得| x ^|≤| x |。向下舍入方式把正数和负数都向下舍入,得到值x-,使得x-≤x。向上舍入方式把正数和负数都向上舍入,得到值x+,满足x≤x+。

    • 浮点运算IEEE标准指定了一个简单的规则,用来确定诸如加法和乘法这样的算术运算的结果。把浮点值x和y看成实数,而某个运算⊙定义在实数上,计算将产生Round (x ⊙ y),这是对实际运算的精确结果进行舍入后的结果。当参数中有一个是特殊值(如-0、-∞或NaN)时,IEEE标准定义了一些使之更合理的规则。其优势在于它可以独立于任何具体的硬件或者软件实现。

    • 需非常小心地使用浮点运算,因为浮点运算只有有限的范围和精度,而且不遵循普遍的算数属性,比如结合性。

    其他(感悟、思考等,可选)

    这一章很多知识是之前的一些课程里接触过的,但没有真正的运用到编程中,很多时候程序出现溢出、强制转换出错等问题都无法解决,深入了解这些知识后,希望能之后的编程中能解决这类问题。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 0/0 2/2 10/10
    第二周 30/30 1/3 7/17
    第三周 0/30 1/4 5/22
    第四周 0/30 0/4 0/0

    参考资料

  • 相关阅读:
    Oracle 11g SQL Fundamentals Training Introduction02
    Chapter 05Reporting Aggregated data Using the Group Functions 01
    Chapter 01Restriicting Data Using The SQL SELECT Statemnt01
    Oracle 11g SQL Fundamentals Training Introduction01
    Chapter 04Using Conversion Functions and Conditional ExpressionsConditional Expressions
    Unix时代的开创者Ken Thompson (zz.is2120.bg57iv3)
    我心目中计算机软件科学最小必读书目 (zz.is2120)
    北京将评估分时分区单双号限行 推进错时上下班 (zz)
    佳能G系列领军相机G1X
    选购单反相机的新建议——心民谈宾得K5(转)
  • 原文地址:https://www.cnblogs.com/LLLLLLQL/p/5919194.html
Copyright © 2011-2022 走看看