信息安全系统设计基础第三周笔记

信息的表示和处理

1.三种数字表示

无符号

基于传统二进制表示法,表示大于或者等于零的数字。

补码

表示有符号整数的最常见方式

浮点数

表示实数的科学计数法的以二为基数的版本。

2.信息存储

1.进制

二进制、八进制、十进制、十六进制(转换:以二进制作为中间变量)

十六进制:以0x或0X开头表示,字符A-F可大写可小写。

2.字

虚拟地址是以这样的一个字来编码的。

每台计算机都有一个字长,指明整数和指针数据的大小。

字长决定虚拟地址空间的最大大小,字长决定的最重要的系统参数就是虚拟地址空间的最大大小。对一个字长为w位的机器,虚拟地址的范围为0-2^(w-1),程序最多访问2^w个字节。

3.数据大小

C语言支持整数和浮点数的多种数据格式

4.寻址和字节顺序

小端法——在存储器中按照从最低有效字节到最高有效字节的顺序存储对象。

大端法——从最高有效字节到最低有效字节的顺序存储。

(小端法:高对高,低对低。大端法:高对低,低对高。)

举例:变量x十六进制值为0x01234567,

寻址和字节顺序

            小端法:最低有效字节在最前面,“高对高,低对低”,是大多数intel兼容机,包括IBM和Sun的个人intel兼容处理器的计算机使用的规则。

例如:变量x为int,位于地址0x100,十六进制值为0x01234567。

小端法:

地址:  0x100     0x101    0x102    0x103

    67        45        23      0

在0x01234567中,高位字节为0x01,低位字节为0x67。

PS:字节顺序是网络编程的基础。

5.布尔代数

(1)位向量的运算:按位运算

(2)位向量的应用:表示有限集合

掩码表示的是设置为有效信号的集合。

(3)位级运算

|:或  &:与  ~:取反  ^:异或  确定一个位级表达式的结果的最好的方法就是:将十六进制的参数扩展成二进制表示并执行二进制运算,然后在转换为十六进制。 w 位级运算的常用算法:掩码运算。  掩码运算:掩码是一个位模式,表示从一个字中选出的位的集合。例如:位级运算x&0xFF生成一个有x的最低有效字节组成的值。表达式~0将生成一个全1的掩码,不管机器的字大小是多少。

(4)逻辑运算

逻辑运算符:||(或)、&&(与)、!(非)  逻辑运算认为所有非零的参数都表示TRUE,参数0表示FALSE。返回1或者0,分别表示结果为TRUE或FALSE。  逻辑运算和位级运算的区别是:  按位运算只有在特殊情况下,即参数被限制为0或者1时,才能与其对应的逻辑运算有相同的行为; 若第一个参数求值就能确定表达式的结果,那么逻辑运算符就不会对第二个参数求值。

(5)移位运算

左移k位:丢弃最高位的k位,右端补k个0  右移包括:逻辑右移算数右移  逻辑右移:左端补k个0(常用于无符号数)  算数右移:左端补k个最高有效位的值(用于有符号数)

6、补码编码

补码形式是最常见的有符号数的计算机表示方式  将字的最高有效位解释为负权 B2T(W)函数为:B2T(x) = -x(w-1)2^(w-1)+∑xi2^i(求和从i=0到i=w-2)

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

处理同样字长的有符号数和无符号数之间相互转换的一般规则:数值可能会改变,但是位模式不变。  c语言允许无符号数和有符号数之间的转换。转换的原则是底层的位表示不变。  当从无符号数转换为有符号数是,效果是应用函数U2T,从有符号数转化为无符号数时,应用函数T2U,其中w表示数据类型的位数。 负数和正数相等的情况:u=2147483648 =-2147483648  (当输出分别为无符号形式和有符号形式时)

8、扩展数的位表示

零扩展:将无符号数转换为更大的数在表示的开头添加0  符号扩展:将一个补码数字转换为一个更大的数据类型

9、截断数字

截断数字:不用额外的位来扩展一个数值,而是减少表示一个数字的位数。

10、整数运算

(1)无符号加法

无符号运算可以被视为一种模运算形式,无符号加法等同于计算和摸上2^w,可以通过简单的丢弃x+y的w+1位表示的最高位,来计算这个数值。  一个算数运算的溢出,是指完整的整数结果不能放到数据类型的字长限制中去。

(2)补码加法

两个数的w位补码之和与无符号之和有完全相同的位级表示。大多数计算机用相同的机器指令来执行无符号或者有符号加法。  有符号加法的结果z=x+y可分为4种情况:  (1)-2^(w)≤z<-2^(w-1):两个负数相加得一个非负的结果。  (2)-2^(w-1)≤z<0:结果正常,z为负数  (3)0≤z<2^(w-1):结果正常,z为正数 (4)2^(w-1)≤z<2^(w):两个正数相加得一个负数的结果。

(3)补码的非

对于范围-2^(w-1)≤x<-2^(w-1)内的x,补码的非运算如下: (1)x=-2^(w-1):补码的非为-2^(w-1); (2)x>-2^(w-1):补码的非为-x。  求位级补码非的方法:  (1)对每一位求补,再对结果加1;(2)建立在将位向量分为两部分的基础之上的。

(4)无符号乘法

两个数x、y相乘且x、y的位数为w,则结果的位数为2w。

(5)补码乘法

同无符号乘法。 若为截断后的结果,则取结果的后w位作为计算结果。 注意:无符号运算和补码运算在“+”、“-”、“*”在位级上有相同的结果。

(6)乘以常数

对于某个常数K的表达式x*K生成代码,编译器会将K的二进制表示表达为一组0或1的交替的序列: [(0…0)(1…1)(0…0)…(1…1)]  可以用以下两种形式来计算这些乘积的结果:  A:(x<<n)+(x<<n-1)+……+(x<<m)  B:(x<<n+1)-(x<<m) 注意:对于n为最高位的情况,B:-(x<<m)

(7)除以2的幂

设x/K,令K=2^n, 当x为正数时,计算 x>>n;  当x为负数时,将x加上偏置量,即加上2^n-1(即K-1),计算** (x+偏置量)>>n**。

(8)关于整数运算的最后思考

计算机执行的“整数”运算实际上是一种模运算形式;  表示数字的有限字长限制来了可能的值的取值范围,运算结果可能溢出; 补码表示提供了一种即能表示负数也能表示正数的灵活方法,同时使用了与执行无符号算术相同的位级实现;  c语言中的unsigned数据类型的使用也应当特别注意,比如,在书写整数常数和调用库函数的时候。

1.二进制小数

定点表示法:“.”为界(不能有效的表示很大的数)

十进制:小数点左边的数字的权是10的非负幂,得到整数值;右边的数字的权是10的负幂,得到小数值。

二进制:小数点左边的数字的权是2的非负幂,右边的数字的权是2的负幂。

IEEE浮点表示

1.用V = (-1)s * M * 2E的形式来表示一个数:

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

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

阶码:E的作用是对浮点数据加权,这个权重是2的E次幂(可能是负数)。

2.将浮点数的位表示划分为三个字段,分别对这些值进行编码:

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

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

n位小数字段frac = fn-1…f1f0编码尾数M,但是编码出来的值也依赖于阶码字段的值是否等于0。

3.两种常见的格式

C语言中的单精度浮点格式float 和双精度浮点格式double。

在float中,s、exp和frac字段分别为1位、k = 8 位和n = 23位,得到一个32位的表示;

在double中,s、exp和frac字段分别为1位、k = 11 位和n = 52位,得到一个64位的表示。

遇到的问题:

1.对浮点数舍入规则中的向偶数舍入的规则不太理解

2.溢出还有些地方不清楚

时间: 2024-10-12 18:35:45

信息安全系统设计基础第三周笔记的相关文章

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.寻址和字节顺序:    字节顺序是网络编程的基

信息安全系统设计基础第三周实验报告

第二章 信息的表示和处理 三种最重要的数字表示法 无符号:基于传统的二进制表示法,大于等于0 补码:有符号整数 浮点数:实数的科学计数法的以二进制为基数的版本 缓冲区溢出漏洞: 计算机的表示法是用有限数量的位来对应一个数字编码,当结果太大不能表示时就会发生溢出.人为的溢出是有一定企图的,攻击者写一个超过缓冲区长度的字符串,植入到缓冲区这时可能会出现两种结果:一是过长的字符串覆盖了相邻的存储单元,引起程序运行失败,严重的可导致系统崩溃:另一个结果就是利用这种漏洞可以执行任意指令,甚至可以取得系统r

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

第2章 信息的表示和处理 三种重要的数字表现形式: 1. 无符号数:编码基于传统的二进制表示法,表示大于或等于零的数字. 2. 补码:编码是表示有符号整数的最常见方法,有符号整数就是可以为正或者是负的数字. 3. 浮点数:编码是表示实数的科学计数法的以二位基数的版本 2.1 信息储存 大多数计算机使用8位块,或者字节,作为最小的可寻址的储存器单位,而不是在储存器中访问单独的位. 虚拟储存器:机器级程序将储存器视为一个非常大的字节数组. 地址:储存器的每个字节的唯一的数字标识. 虚拟地址空间:所有

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

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

信息安全系统设计基础第三周学习总结—20135227黄晓妍

一.Vim编辑器 1.Vim的六种模式 2.Vim三种常用模式的使用方式,以及三者的切换.打开Vim即默认进入普通模式,按i进入插入模式,按esc从插入模式退出普通模式,再按:进入命令行模式. 普通模式下游标的移动 按键 说明 h 左 l 右(小写L) j 下 k 上 w 移动到下一个单词 b 移动到上一个单词 普通模式进入插入模式的方式 命令         说明 i        在当前光标处进行编辑 I        在行首插入 A       在行末插入 a       在光标后插入编辑

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

第2章 信息的表示和处理 (一).三种重要的数字表示 无符号数:编码基于传统的二进制表示法(大于或者等于零的数字). 补码:编码是表示有符号整数的最常见方式(为正或者为负的数字). 浮点数:编码是表示实数的科学记数法的以二为基数的版本. 整数的表示虽然只能编码一个相对较小的数值范围,但是是精确的:而浮点数虽然可以编码一个较大的数值范围,但是这种表示是近似的表示. 大量的计算机安全漏洞都是由于计算机运算的微妙细节引发的. (二).信息存储 计算机最小的可寻址的存储器单位——字节 一个字节的值域:0

20135219洪韶武——信息安全系统设计基础第三周学习总结

学习过程总结 一.gcc 编译 使用C99特性时 gcc -std=c99 xxx.c 实验楼环境为64位,编译为32位机器码: gcc -m32 xxx.c 二.重点注意知识点 p20: 三种数字:无符号数.有符号数(2进制补码).浮点数,信息安全系同学从逆向角度考虑为什么会产生漏洞 p22: 进制转换,注意拿二进制作中间结果就好转了 p25: gcc -m32 可以在64位机上(比如实验楼的环境)生成32位的代码 p26: 字节顺序是网络编程的基础,记住小端是“高对高.低对低”,大端与之相反