2.1 信息的存储
整数:虽然只能编码一个相对较小的数值范围,但是这种表示是精确的
符点数:虽然可以编码一个较大的数值范围,但是这种表示只是近似的
c/c++:完全相同的数字表示和运算
java:创建了一套新的数字表示和运算标准
gcc版本:
gcc -std=c11 prog.c
信息存储:
字节:8位的块,作为最小的可寻址的内存单位
机器级程序:将内存视为一个非常大的字节数组,称为虚拟内存。
址址:内存的每一个字节都由一个唯一的数字来标识
虚拟地址空间:所有可能址址的集合,展现给机器级程序的概念性映像。
指针:值和类型。值表示某个对象的位置,类型:指针所指像数据的存储类型。
位模式:16进表示最合适。A 10 C 12 F 15
编写机器级程序的一个常见任务就是在位模式的十进制、二进制和十六进制表示之间人工转换。
二进制与十六进制转化:
十进制与十六进制转换
字数据大小
字长:指明指针数据的标称大小。虚拟地址是以这样的一个字来编码,字长决定的最重要的系统参数就是虚拟地址空间的最大大小。字长为w位的机器而言,
虚拟地址的范围为0~2^w。
gcc -m32 prog.c
gcc -m64 prog.c
32位程序或64位程序:程序是如何编绎的,而不是其运行机器类型。
寻址和字节顺序:
小端:最低有效字节在最前面的方式
大端:最高有效字节在最前面的方式
大多数Intel兼容机都用小端
Android、Apple 小端模式
大小端影响:
1、网络传输
2、检测机器级程序
3、编写规避正常的类型系统的程序(强制转换或联合)
&x:创建了一个指向保存变量x的位置的指针
指针的类型 取决于x的类型
强制类型转换:将一种数据类型转换为另一种。不会改变真实的指针,它们只是告诉编绎器以新的数据类型来看待被指向的数据。
表示字符串:
C语言中字符串被编码为一个以null(其值为0)字符结尾的字符数组。
文本数据比二进制数据具有更强的平台独立性
表示代码:
不同的机器类型使用不同的且不兼容的指令和编码方式。即使是完全一样的进程,运行在不同的操作系统上也会有不同的编码规则,因此,二进制代码是不兼容的
计算机系统:从机器的解度来看,程序仅仅只是字节序列,机器没有关于原始源程序的任何信息,除了可能有些用来帮助调试的辅助表以外。
布尔代数简介:
C语言中的位级运算:运用到任何”整型"的数据类型上。
确定一个位级表达式的结果最好的方法:将十六进制扩展成二进制表示并执行二进制运算,然后再转换回十六进制
a^a=0;
位级运算:实现掩码运算。从一个字中选出的位的集合
x&0xff 生成一个由x的最低有效字节组成的值,而其他的字节就被置为0
~0将生成一个全1的掩码,不管机器的字大小是多少。
c语言中的逻辑运算:&& || !
如果对第一个参数求值就确定表达式的结果,那么逻辑运算就不会对第二个参数求值。
c语言中的移位运算
c 无符号数,逻辑右移
有符号数,算述右移
java >>算述右移
>>>逻辑右移
优先级:加减运算的优先级比移位运算要高