2018-2019-1 20165323 《信息安全系统设计基础》第二周学习总结

第二章学习总结

信息存储

1、机器级程序将内存视为一个非常大的字节数组,称为虚拟内存。内存的每个字节都由一个唯一的数字来标识,称为它的地址。所有可能地址的集合就称为虚拟地址空间。
2、每个程序对象可以简单地视为一个字节块,而程序本身就是一个字节序列。

字数据大小

1、字长:指明指针数据的标称大小。决定最重要的系统参数就是虚拟地址空间的最大大小。对于一个字长为w位的机器而言,虚拟地址的范围为0~2w-1,程序最多访问2w个字节。
2、32位字长限制虚拟地址空间为4千兆字节。
3、64位机器运行32位机器编译的程序

gcc -m32 prog.c
4、C语言允许多种关键字的顺序,下列声明都是一个意思:
unsigned long
unsigned long int
long unsigned
long unsigned int

寻址和字节顺序

1、在几乎所有的机器上,多字节对象被存储为连续的字节序列,对象的地址为所使用字节中最小的地址
2、小端法:最低有效字节在最前面的方式(高对高,低对低)
3、大端法:最高有效字节在最前面的方式(高对低,低对高)

表示字符串

1、C语言中的字符串被编码为一个以null(其值为0)字符结尾的字符数组。每个字符都由某个标准编码来表示,最常见的是ASCII字符码。
2、在使用ASCII码作为字符码的任何系统上都会得到相同的结果,与字节顺序和字大小规则无关
3、二进制代码是不兼容的
4、从机器的角度来看,程序仅仅只是字节序列

移位运算:

1、逻辑右移:右移N位,就在高位补N个0
2、算术右移:右移N位,就补N个最高位的值
3、在JAVA中,x>>k会将x算术右移k个位置,而x>>>k会对x做逻辑右移

数据表示

1、无符号数
B2U = 每一位的权值之和
2、有符号数
B2T = 最高有效位代表正负值+各位的权值

补码与无符号数的相互转换

当执行一个运算时,如果它的一个运算数是有符号的而另一个是无符号的,那么C语言会隐式地将有符号参数强制类型转换为无符号数,并假设这两个数都是非负的,来执行这个运算

数字的扩展

要将一个无符号数转换为一个更大的数据类型,我们只要简单地在表示的开头添加0,这种运算被称为零扩展
无符号数的零扩展和补码数的符号扩展

数字的截断:截断无符号数;截断补码数值

整数运算

1、无符号加法:

2、有符号数的加法
转换为两个数的补码相加

3、无符号乘法
将一个无符号数截断为w位等价于计算该值模2^w

4、补码加法

5、浮点数
IEEE浮点表示

用 V = (-1)s * M * 2 E

符号决定正负,M为二进制小数,E是阶码

C语言中的浮点数

double与float 双精度与单精度

int、float、double转化时有可能出现数据丢失的情况
6、当在int、float、和double格式之间进行强制类型转换时,程序改变数值和位模式的原则如下:
1、从int转换成float,数字不会溢出,但是可能被舍入
2、从int或float转换成double,因为double有更大的范围,也有更高的精度,所以能够保留精确的数值
3、从double转换成float,因为范围要小一些,所以值可能溢出成正无穷或负无穷。
4、从float或者double转换成int,值将会向零舍入

原文地址:https://www.cnblogs.com/asd65360323/p/9733620.html