信息安全系统设计基础第三周学习总结-吕松鸿

第2章 信息的表示和处理

(一)、三种重要的数字表示

无符号数:编码基于传统的二进制表示法(大于或者等于零的数字)。

补码:编码是表示有符号整数的最常见方式(为正或者为负的数字)。

浮点数:编码是表示实数的科学记数法的以二为基数的版本。

整数的表示虽然只能编码一个相对较小的数值范围,但是是精确的;而浮点数虽然可以编码一个较大的数值范围,但是这种表示是近似的表示。

大量的计算机安全漏洞都是由于计算机运算的微妙细节引发的。

(二)、信息存储

计算机最小的可寻址的存储器单位——字节

一个字节的值域:00H-FFH

一、十六进制表示法

1. C表示法

0x0X开头的数字常量为十六进制

2. 进制转换

常用进制:二进制(B),十进制(D),八进制(O或者Q),十六进制(H)

转换为二进制-十六进制相互转换,二进制的四位数字对应十六进制的一位数字。

同理,二进制与八进制的转化是三位对应一位。

但是通常情况下,进制转换都以二进制为桥梁进行转换。

注:特殊情况

课本23页有这样一种情况,要表示的数字常量x=2的n次方时,n=i+4j,且0≤i≤3时,开头的十六进制数字为1(i=0)、2(i=1)、4(i=2)、8(i=3),后面跟随着j个十六进制的0。这里的j是代表着每四位二进制位对应的十六进制位,而i的范围是因为十六进制中每一位的范围是0-F,最多能容纳到8。这是一种方便快捷的计算方法。

二、字

字长决定虚拟地址空间的最大大小。

字长为w,虚拟地址的范围为1-(2^w-1)

w=32或64:也就是我们通常所说的电脑是32位还是64位。也可以理解为CPU一次处理数据的位数。

三、数据大小

在不同字长的计算机中,相同的数据类型所占用的字节数并不相同,32位和64位的区别参见教材26页表格。

gcc -m32 可以在64位机上生成32位的代码

四、寻址和字节顺序

1.小端法和大端法

  • 小端法:最低有效字节在前面——“高对高,低对低”
  • 大端法:最高有效字节在前面

    2.强制类型转换

  • typedef:命名数据类型
  • sizeof():返回类型的字节数(好处?便于移植——32位和64位的区别)

五、表示字符串

c语言中字符串被编码成为一个null(值为0)字符结尾的字符数组

命令man ascii:得到ASCII字符码表

六、表示代码

二进制代码在不同的操作系统上有不同的编码规则。所以二进制代码是不兼容的

七、布尔代数

1.最简单布尔代数:与& 或| 非~ 异或^(结果为0或1)

2.扩展的布尔运算:位向量的运算(结果仍是位向量)

位向量的应用:表示有限集合,对集合编码

八、位级运算

1.将位向量按位进行逻辑运算,结果仍是位向量

2.掩码运算

掩码:用来选择性的屏蔽信号,是一个位模式,表示从一个字中选出的位的集合。

用位向量给集合编码,通过指定掩码来有选择的屏蔽或者不屏蔽一些信号,某一位位置上为1时,表明信号i是有效的;0表示该信号被屏蔽。这个掩码就表示有效信号的集合。

0xFF:屏蔽除最低有效字节之外的所有字节。

~0:生成全1的掩码

九、逻辑运算

1.逻辑运算符:与&&  或||  非!

2.计算方法:所有非零参数都代表TRUE,0参数代表FALSE。1代表TRUE,0代表FALSE

  • 只有当参数被限制为0或1时,逻辑运算才与按位运算有相同的行为。
  • 如果对第一个参数求值就能确定表达式的结果,逻辑运算符就不会对后面的参数求值。

十、移位运算

1.左移<<

2.右移>>

逻辑右移:在左端补k个0,多用于无符号数移位运算

算术右移:在左端补k个最高有效位的值,多用于有符号数移位运算。

  • Java中用>>表示算术右移,用>>>表示逻辑右移
  • 移位运算优先级小于算术运算

(三) 整数表示

一、整型数据类型

整型数据类型——表示有限范围的整数,每种类型都能用关键字来指定大小,还可以指定是非负数(unsigned)还是负数(默认)。这些不同大小的分配的字数会根据机器的字长和编译器有所不同。

关于取值范围

  • 32位机器和64位机器对于同一数据类型的典型取值范围是有所不同的。
  • 典型取值范围中,取值范围不对称——负数的范围比整数的范围大1。
  • c语言标准定义的每种数据类型必须能够表示的最小的取值范围中,正数和负数的取值范围是对称的。

具体范围见书38页。

要用C99中的“long long”类型,编译是要用 gcc -std=c99

二、无符号数的编码

编码方法见书,已经在很多门课程中都学习过了。

需要注意的是无符号数的二进制表示的一个重要性质

0-(2^w)-1中的每一个整数和长度为w的位向量是一一对应的。

三、补码编码——有符号数的编码

关于补码,一些可能没有注意过的知识:

  • 我们都知道补码的最高位是表示符号位,解释为负权,“权重”为-2的(w-1)次方,即无符号表示中的权重的负数。符号位为1,表示值为负,符号位为0,表示值为非负(不是正,因为有0)
  • 补码的映射关系同样是一一对应
  • 补码的范围:-2^(w-1)~2^(w-1)-1,即|TMin|=|TMax|+1——因为非负数中0的存在。
  • 无符号数编码(U)和补码(T):UMax = 2 TMax + 1
  • 大多数情况下用补码来表示有符号数,并且具有的是典型的取值范围。

有符号数的其他表示方法:

  • 原码
  • 反码

四、有符号数和无符号数的转换

1.强制类型转换

位级角度考虑。

强制类型转换的结果保持位值不变,只是改变了解释这些位的方式。即:这些位上的值不变,但是由于最高有效位的权重发生变化,从而导致结果发生改变。

2.c语言中的有符号数和无符号数及其转换

转换原则:底层的位保持不变。
(1)有符号数→无符号数
  • 非负数——保持不变
  • 负数——转换成大正数
    (2)无符号数→有符号数

    以2的w-1次方为界限:

  • 小于它——保持不变
  • 大于它——转换为负数值

六、扩展一个数字的位表示

扩展:从一个较小的数据类型转换为较大的数据类型,同时保持数值不变。

1.零扩展:在开头加上0。多用于无符号数转换为一个更大的数据类型。

2.符号扩展:添加最高有效位的副本。多用于补码数字转换

七、截断

截断:减少表示一个数字的位数。而这么做可能会改变它的值,这也是溢出的一种形式。

将一个w位的数截断为k位数字时,就会丢弃高w-k位。

  • 对于无符号数来说,就相当于 mod 2的k次幂
  • 对于有符号数来说,先按照无符号数截断,然后再转化为有符号数

(四) 浮点数

浮点表示对形如V=x X (2^y)的有理数进行编码,适用于:

非常大的数字
非常接近于0的数字
作为实数运算的近似值

一、二进制小数

小数的二进制表示法只能表示那些能够被写成x X (2^y)的数,其他的值只能近似的表示。

权重

以小数点为界:

左边第i位,权重为2的i次幂
右边第i位,权重为1/2的i次幂

二、IEEE浮点表示

IEEE浮点标准:

用V=(-1)^s X 2^E X M 来表示一个数:
符号:s决定这个数是正还是负。0的符号位特殊情况处理。
阶码:E对浮点数加权,权重是2的E次幂(可能为负数)
尾数:M是一个二进制小数,范围为1~2-ε或者0~1-ε(ε=1/2的n次幂)

编码规则:

单独符号位s编码符号s,占1位
k位的阶码字段exp编码阶码E
n位小数字段frac编码尾数M(同时需要依赖阶码字段的值是否为0)

两种精度

  • 单精度(float),k=8位,n=23位,一共32位;
  • 双精度(double),k=11位,n=52位,一共64位。

1.规格化的值

即exp的位模式既不全0也不全1的时候,这是最一般最普遍的情况,因而是规格化的。

2.非规格化的值

即阶码域全为0时的数。

3.特殊值

特殊值是在阶码位全为1的时候出现的。分为两种情况:

(1)无穷

小数字段全为0

(2)NaN不是一个数

小数字段非0

三、舍入

舍入运算:找到和数值x最接近的匹配值x‘,可以用期望的浮点形式表示出来。

IEEE浮点格式定义了四种不同的舍入方法:

1.向偶舍入(默认方法)

即:将数字向上或向下舍入,是的结果的最低有效数字为偶数。

能用于二进制小数。

2.向零舍入

即:把整数向下舍入,负数向上舍入。

3.向下舍入

正数和负数都向下舍入。

4.向上舍入

正数和负数都向上舍入。

四、浮点运算

1.浮点加法

  • 浮点加法是可交换的
  • 浮点加法不具结合性
  • 大多数值的浮点加法都有逆元,除了无穷和NaN。
  • 浮点加法满足单调性

2.浮点乘法

  • 浮点乘法是可交换的
  • 浮点乘法不具有结核性
  • 浮点乘法的单位元为1.0
  • 浮点乘法在加法上不具备分配性

五、c语言中的浮点数

int、float、double相互转换?

int → float 不会溢出但有可能舍入
int/float → double 结果保留精确数值
double → float 可能溢出为±∞,由于精确度较小也有可能被舍入
float/double → int 向零舍入,可能溢出。
时间: 2024-11-15 20:57:35

信息安全系统设计基础第三周学习总结-吕松鸿的相关文章

信息安全系统设计基础第十周学习总结-吕松鸿

第八章 异常控制流 平滑:指在存储器中指令都是相邻的. 突变:出现不相邻,通常由诸如跳转.调用.和返回等指令造成. 异常控制流ECF:即这些突变. 关于ECF: 1.ECF是操作系统用来实现I/O.进程和虚拟存器的基本机制 2.应用程序通过使用一个叫做陷阱或者系统调用的ECF形式,向操作系统请求服务 3.ECF是计算机系统中实现并发的基本机制 4.软件异常机制——C++和Java有try,catch,和throw,C中非本地跳转是setjmp和longjmp 第一节 异常 异常是异常控制流的一种

信息安全系统设计基础第六周学习总结-吕松鸿

第6章 存储器层次结构 6.1存储技术 6.1.1随机访问存储器 分为两类:静态(SRAM)和动态(DRAM). (1)SRAM:高速缓存存储器,既可以在CPU芯片上,也可以在片下. (2)DRAM:主存以及图形系统的帧缓冲区. 1.静态RAM SRAM将每个位存储在一个双稳态的存储器单元里.每个单元是用一个六晶体管电路来实现的.该电路有一个属性:可以无限期地保持在两个不同的电压配置或状态之一. 2.动态RAM 每位晶体管数 相对访问时间 持续的? 敏感的? 相对花费 应用 SRAM 6 1x

信息安全系统设计基础第八周学习总结-吕松鸿

第10章 系统级I/O I/O:在主存和外部设备之间拷贝数据的过程. 10.1Unix I/O 一个Unix文件就是一个m个字节的序列: B0,B1,B2…Bk…B(m-1) 1.所有的输入输出都能以一种统一且一致的方式来执行: (1)打开文件 a.描述符:内核返回一个小的非负整数,它在后续对此文件的所有操作中标识这个文件. b. Unix外壳创建的每个进程开始时都有三个打开的文件:标准输入(描述符为0).标准输出(描述符为1).标准错误(描述符为2). (2)改变当前的文件设置. (3)读写文

信息安全系统设计基础第十三周学习总结-吕松鸿

第九章 虚拟存储器 虚拟存储器是计算机系统最重要的概念之一,它是对主存的一个抽象 三个重要能力: 它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,高效的使用了主存 它为每个进程提供了一致的地址空间,从而简化了存储器管理 它保护了每个进程的地址空间不被其他进程破坏 9.1 物理和虚拟寻址 1.物理地址 计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组,每字节都有一个唯一的物理地址PA. 根据物理地址寻

信息安全系统设计基础第五周学习总结-吕松鸿

第四章  处理器体系结构 4.1 Y86指令集体系结构 4.11程序员可见的状态 1.程序员可见状态: Y86程序中的每条指令都会读取或修改处理器状态的某些部分. 2.“程序员”: 既可以是用汇编代码写程序的人,也可以是产生机器级代码的编译器. 3.程序寄存器: (1)8个,%eax.%edx.%ebx.%esi.%edi.%esp和%ebp. (2)处理器的每个程序寄存器存储一个字. (3)寄存器%esp被入栈,出栈,调用和返回指令作为栈指针. (4)其他情况,有三个一位的条件码:ZF,SF和

20135223何伟钦—信息安全系统设计基础第三周学习总结

信息的表示和处理 2.0三种数字表示 无符号:编码基于传统的二进制表示法,表示大于或者等于零的数字. 补码:编码是表示有符号整数的最常见的方式,有 符号整数就是可以为正或者为负的数字. 浮点数:编码是表示实数的科学记数法 的以二为基数的版本. 溢出(overflow)的例子:使用 32 位来表示数据类型int,计算表达式200*300*400*500会得出结果 -884 901 888. 这违背了整数运算的特性,计算一组正数的乘积不应产生一个为负的结果. 2.1信息存储 机器级程序将存储器视为一

20135210程涵——信息安全系统设计基础第三周学习总结

本次学习任务:仔细研读<深入理解计算机系统>第二章内容,掌握整数表示.浮点数表示及其运算 一.学习过程 三种重要的数字表现形式: 无符号数:编码基于传统的二进制表示法表示大于或等于零的数字. 补码:编码是表示有符号整数的最常见方法,可以是正或者是负的数字. 浮点数:编码是表示实数的科学计数法的以二位基数的版本 溢出:计算机的表示法是用有限数量的位来为一个数字编码,因此当结果太大就会导致某些运算溢出. 整数和浮点数会有不同的数学属性是因为处理数字表示有限性的方法不同. (整数是编码相对较小的数值

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

要点概括: 一.三种最重要的数字表示:    无符号数,有符号数(二进制补码),浮点数 从逆向考虑为什么产生漏洞: 结果太大不能表示时产生溢出,得到了负的结果.   二.信息存储 1.进制转换:以二进制作为桥梁. 2.字长:32位 64位 3.数据大小:单精度(4字节),双精度(8字节) 4.声明指针: 对于任何数据类型T,声明 T *p: 表明p是一个指针变量,指向一个类型为T的对象. 5.gcc –m32 可以在64位机上生成32位的代码. 6.寻址和字节顺序:    字节顺序是网络编程的基

信息安全系统设计基础第三周学习总结 ---20135334 赵阳林

第2章 信息的表示和处理 三种最重要的数字表示: * 无符号 * 补码 * 浮点数 运算: * 整数运算 * 浮点运算 对比: 整数运算只能编码相对较小的范围,但是是精确的: 浮点运算可以编码一个较大的范围,但是是近似的:浮点运算不可结合. 注意:溢出——运算位数的限制 第一节 信息存储 计算机最小的可寻址的存储器单位——字节 一个字节的值域:00H-FFH 一.十六进制表示法 1. C表示法 以0x或0X开头的数字常量为十六进制 2. 进制转换 常用进制:二进制(B),十进制(D),八进制(O