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

信息的表示和处理

     

      

一、信息存储。

1、数字表示

无符号编码  基于二进制表示法

补码编码     有正有负

浮点数编码 

2.信息存储

在二进制表示法中,它的值域是00000000(2)~11111111(2);如果用十进制表示就是0(10)~255(10);

 十六进制的表示:0X或者Ox开头的数字常量。)

字长:指明整数和指针数据的标称大小。

字长决定的最重要的系统参数就是虚拟地址空间的最大大小。

寻址和字节顺序:

通常,多字节对象都被储存为连续的字节序列,对象地址为所使用字节中最小的地址。

小端法----最低有效字节在最前面的方式;

大端法----最高有效字节在最前面的方式;

双端法    许多微处理器使用

反汇编器:是一种确定可执行程序文件所表示的指令序列的工具。

表示字符串

C中字符串被编码为一个NULL(值为0)字符结尾的字符数组。每个字符都有某个标准编码来表示。最常见的是ASCII码。

 

最简单的布尔代数二元集合{0,1}

位向量:有固定长度为w、有0和1组成的串。位向量运算可以定义成参数的每个对应元素之间的运算。集合编码

位极运算:实现掩码运算,这里的掩码是一个位模式,表示从一个字中选出的位的集合。

确定一个位级表达式的结果的最好的方法,就是将十六进制的参数扩展到二进制表示并执行二进制运算,再转换回十六进制。

逻辑运算

逻辑运算认为所有非零的参数都表示TRUE,而参数0表示FALSE.他们返回1或者0;按位运算只有在特殊情况下,也就是参数被限制为0或者1时,

区别2: 如果对第一个参数求值,就能确定表达式的结果,那么逻辑运算就不会对第二个参数求值。C语言标准并没有明确定义应该使用哪种类型的右移,对于无符号数据,右移必须是逻辑的。对于有符号数据,算术的或者逻辑的右移都可以。实际上,几乎所有的编译器/机器组合都对有符号的数据使用算术右移,且许多程序员都假设机器会使用这种右移。

二、整数表示。

整型数据类型

用位来编码整数的两种方式:一种只能表示非负数,而另一种只能表示负数、零和正数。

整数数据类型——表示有限范围的整数,每种类型都能用关键字来指定大小,而不同大小的分配字节数会根据机器的字长和编译器有所不同。

根据字节分配,不同的大小所能表示的值的范围是不同的。

无符号数编码

 

有符号数和无符号数之间的转换

转换的原则是底层的位表示不变

零扩展——将一个无符号数转换为一个更大的数据类型,表示在开头加0。

符号扩展——将一个补码数字转换为一个更大的数据类型。

 

三、整数运算

无符号数加法

一个算术运算溢出,是指出完整的整数结果不能放到数据类型的字长限制中去。

乘以常数 无论是无符号运可能算还是补码运算,乘以2的幂都会导致溢出。

四、浮点数

当一个数字不能被准确的表示为这种格式,就必须向上调整或者向下调整

二进制小数

第一步是考虑含有小数值的二进制数字。

IEEE浮点表示

符号 尾数 阶码

三种情况:规格化的值 非规划的值 特殊值

舍入

浮点运算

 感想小结:通过研究数字的实际表示,理解可以表示的值得范围和不同算术运算的属性。了解这些属性,使我对让编写的程序能在全部数值范围内正确工作,而且具有可以跨越不同机器、操作系统和编译器组合的移植性有了更深一步的理解。大量计算机的安全漏洞都是犹豫计算机算术运算的微妙细节引发的,需要我们去进一步了解。

原文地址:https://www.cnblogs.com/zhengwei0712/p/4854784.html