2.1 信息的存储

整数:虽然只能编码一个相对较小的数值范围,但是这种表示是精确的

符点数:虽然可以编码一个较大的数值范围,但是这种表示只是近似的

c/c++:完全相同的数字表示和运算

java:创建了一套新的数字表示和运算标准

gcc版本:

gcc -std=c11 prog.c

2.1 信息的存储

信息存储:

字节:8位的块,作为最小的可寻址的内存单位

机器级程序:将内存视为一个非常大的字节数组,称为虚拟内存。

址址:内存的每一个字节都由一个唯一的数字来标识

虚拟地址空间:所有可能址址的集合,展现给机器级程序的概念性映像。

指针:值和类型。值表示某个对象的位置,类型:指针所指像数据的存储类型。

位模式:16进表示最合适。A 10 C 12 F 15

编写机器级程序的一个常见任务就是在位模式的十进制、二进制和十六进制表示之间人工转换。

二进制与十六进制转化:

2.1 信息的存储

2.1 信息的存储

十进制与十六进制转换

2.1 信息的存储

字数据大小

字长:指明指针数据的标称大小。虚拟地址是以这样的一个字来编码,字长决定的最重要的系统参数就是虚拟地址空间的最大大小。字长为w位的机器而言,

虚拟地址的范围为0~2^w。

gcc -m32 prog.c

gcc -m64 prog.c

32位程序或64位程序:程序是如何编绎的,而不是其运行机器类型。

2.1 信息的存储

寻址和字节顺序:

小端:最低有效字节在最前面的方式

大端:最高有效字节在最前面的方式

2.1 信息的存储


大多数Intel兼容机都用小端

Android、Apple 小端模式

大小端影响:

1、网络传输

2、检测机器级程序

3、编写规避正常的类型系统的程序(强制转换或联合)


&x:创建了一个指向保存变量x的位置的指针

指针的类型 取决于x的类型

强制类型转换:将一种数据类型转换为另一种。不会改变真实的指针,它们只是告诉编绎器以新的数据类型来看待被指向的数据。


表示字符串:

C语言中字符串被编码为一个以null(其值为0)字符结尾的字符数组。

文本数据比二进制数据具有更强的平台独立性


表示代码:

不同的机器类型使用不同的且不兼容的指令和编码方式。即使是完全一样的进程,运行在不同的操作系统上也会有不同的编码规则,因此,二进制代码是不兼容的

计算机系统:从机器的解度来看,程序仅仅只是字节序列,机器没有关于原始源程序的任何信息,除了可能有些用来帮助调试的辅助表以外。


布尔代数简介:

2.1 信息的存储

2.1 信息的存储

C语言中的位级运算:运用到任何”整型"的数据类型上。

确定一个位级表达式的结果最好的方法:将十六进制扩展成二进制表示并执行二进制运算,然后再转换回十六进制

a^a=0;

位级运算:实现掩码运算。从一个字中选出的位的集合

x&0xff 生成一个由x的最低有效字节组成的值,而其他的字节就被置为0

~0将生成一个全1的掩码,不管机器的字大小是多少。


c语言中的逻辑运算:&& || !

如果对第一个参数求值就确定表达式的结果,那么逻辑运算就不会对第二个参数求值。


c语言中的移位运算

2.1 信息的存储


c 无符号数,逻辑右移

    有符号数,算述右移

java   >>算述右移

>>>逻辑右移

2.1 信息的存储

优先级:加减运算的优先级比移位运算要高