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

    2017-2018-3 20155337《信息安全系统设计基础》第3周学习总结

    教材学习内容总结

    • 研究数字在计算机中是如何存储的,以及值的范围和算术属性,有助于我们跨越不同的机器、系统以及编译器获得更好的可移植性。了解这些细节非常重要,程序员有责任和义务编写健壮的程序,了解其内部如何工作,其不良行为背后的原因,对于安全领域也有非常高的价值。

    信息的存储:编码

    单个的位没啥用处,当把位组合在一起(字节8个位),再进行某种解释,赋予不同的含义,我们就能表示世间万物了。每个程序都可以简单的视为一个字节块,程序本身就是一个字节序列。

    十六进制

    由于二进制信息太过冗长,于是在描述位模式的时候不是很方便,就发明了16进制。这里没什么好说的了,如下表:

    • 可以使用公式:n = i + 4j 其中n = 11 ;i的取值范围是[0-3]对应的值为:0对应1,1对应2,2对应4,3对应8相当于2的i次幂,j就代表多少个0。回到上面的例子中,11 = 3 + 4 X 2 就可以写成0X800  (j=2两个0,i=3对应8)。算是奇技淫巧吧,了解一下就可以了。
      对于16进制和10进制的相互转化就无非是反复乘以或者除以16,也没啥好说的了。

    我们前面说过虚拟地址空间可以使得我们很方便的范围到每个字节,但是虚拟地址是以一个字来进行编码的,所以字的长度就决定了我们能范围的最大范围。对于我们使用的32位的计算机而言,程序最多范围2的32次方个数据,也就是我们经常所说的4GB

    数据大小

    关注数据大小的原因是使得程序对于不同数据类型的大小不敏感,如果我们用一个int类型(4字节)来存一个指针(64位下可能是8字节)就会带来不小的麻烦。

    寻址和字节顺序

    对于跨越多个字节的数据、指令和控制信息,我们必须要知道他的地址是什么,以及是按照什么顺序在计算机中存储的。对于同样的一个数字:1234567;有两种存储方法:

    就数据1234567来说,它跨越了4个字节,从0x100开始到0x103结束,我们除了必须要知道开始的地址0x100外,还有一个重要的就是必须要了解是何种顺序在计算机中存储的。就具体的应用来说,至少有下面三个方面:

    ①通过网络在不同机器以及系统中传递数据时,必须要遵守建立的字节顺序;

    ②强制类型转换:不会改变真实指针,只是告诉编译器以新的类型来解释数据;

    ③阅读表示整数的数据类型时(不是很理解)

    字符串:文本数据比二进制数据有更强的平台独立性

    字符串是以null(0)字符结尾的字符数组,在任何系统上面都能看到相识的结果。但二进制机器码就不一样了:

    编译成不同的机器码的结果如下:

    因此:二进制代码是不兼容的,从机器的角度来看,程序仅仅只是字节序列。

    布尔运算

    关于布尔运算的基本的方法与、或、非、异或就不在叙述了。除了判断逻辑以外讲讲有什么用:

    掩码运算:举一个例子,我们要用守蒙住脸蛋防止别人看到我们的脸,但是我们又很想看看对方长啥样子,这时候就会留一个缝隙,让眼睛可以往外边看。这基本上就是掩码的功能了。我们有选择的屏蔽了一些信号,如长相。又如:0xFF(1111 1111)任何一个数与上0xFF,就能将最低的8位保留下来。

    位运算与逻辑运算的区别:逻辑运算认为非0就是true,而0表示false;逻辑运算如果第一个表达式能确定结果就不会对第二个求值。
    移位运算:

    对于无符号的数,右移动必须是逻辑上的。对于有符号的数,可以是任何一种,但常用的是算术右移动

    教材学习中的问题和解决过程

    小数值与二进制数与十进制数之间的转换

    考虑二进制小数表示的一个简单方法是将一个数表示为形如x/(2^k)的小数。将这个形式表示为二进制的过程是:使用x的二进制表示,并把二进制小数点插人从右边算起的第k个位置。举一个例子,对于25/16,我们有25=11001。然后把二进制小数点放在从右算起的第4位,得至1. 1001。把分数拆分成若干形如1/(2x)之和的形式,例如25/16=1/(20)+1/(21)+1/(24),那么可以知道,小数点前为1,小数点后第一位和第四位为1,小数点后其他位为0。

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

    计算机将信息按位编码,通常组织成字节序列,用不同的编码方式表示整数实数和字符
    串,不同的计算机模型,在编码数字和多字节数据中的字节排序时使用不同的约定。C 语言
    中的设计可以包容多种不同的字长和编码的实现,虽然高端机器逐渐开始使用64位字长,但
    目前大多数及其仍使用32位。大多数机器对整数使用补码编码而对浮点数使用IEEE浮点编码
    ,并且理解算数运算的特性,对于想使编写的程序能在全部数值范围上正确运算的程序员来
    说很正要。
    在相同长度的无符号和有符号整数之间进行的强制类型转换时,大多数C 语言实现遵循
    的原则是底层的位模式不变,在补码机器上,对于一个w位的值这种行为是由函数来描述的>。C语言隐式的强制类型转换会出现许多程序员无法预计的结果,常常导致程序错误。
    由于编码长度有限,传统整数和实数运算相比,计算机运算具有完全不同的属性。当超>出表示范围的时候,有限长度引起的数值溢出,当浮点数非常接近0从而转换0时也会发生下
    溢。
    和大多数其他程序语言一样,C语言实现的有限整数运算和直式的整数运算相比,有一>些特殊的属性。例如溢出。但无符号数和补码的运算都满足整数运算的许多其他属性,包括
    结合律交换律分配律,这就允许编译器做很多优化。
    最常见的浮点表示方式是由IEEE 标准754定义的,我们必须非常小心地使用浮点运算,
    只有有限范围和精度,且不遵守普遍的算数属性

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第五周 107/200 1/2 12

    参考资料

    • 深入理解操作系统(第3版)
  • 相关阅读:
    如何把py文件打包成exe可执行文件
    给大家推荐几款软件
    火狐浏览器报错“support.mozilla.org
    win怎么设置最快捷的下滑关机
    在Ubuntu上安装Chrome Driver和Firefox Driver
    解决pycharm安装包过程出现的问题:module 'pip' has no attribute 'main'
    如何实现windows命令提示符的tab补全?
    在windows下使用cmd命令全速下载百度云文件
    pandas用法大全
    oracle 19c database 静默安装
  • 原文地址:https://www.cnblogs.com/Twe1vE/p/7672447.html
Copyright © 2011-2022 走看看