ICS
二、信息的表示与处理
1.信息的存储
机器级程序将内存视为一个非常大的字节数组,称为虚拟内存。所有可能地址的集合称为虚拟地址空间。
字节:信息存储的基本单元,由8个位组成,每个位为0或1。
十六进制数 :0x开头,数字0~9,字母A~F可大写可小写。
进制间的转换
对于一个字长为w的机器来说,虚拟地址的范围为0~ ,程序最多访问个字节
32位字长限制虚拟地址空间位4GB,扩展到64位有16EB
64位机器做了向后兼容,能运行32位机器程序,32位则不能反之。
寻址和字节顺序
大端法:顺着读
小端法:以字节为单位倒着读
大多数Intel兼容机、Andriod、IOS都适用小端法,IBM和Oracle按照大端法。
位运算(返回一个数)
~取反 |或 &与 ^异或
逻辑运算(返回0x01或0x00)
&& 且 ||或 !非
移位运算
<<左移 >>右移(分为逻辑右移和算数右移,逻辑右移直接移,算数右移高位补k个最高有效位的值。(有符号数算数右移,无符号数逻辑右移))
2. 整数 Integer
Java只支持有符号整数
无符号数的编码
B2U=
函数B2U是一个双射
补码编码
最高位也称为符号位,若符号位为0则和无符号数编码表示差不多
B2也是个双射,补码的范围是不对称的
有符号数与无符号数之间的转换
强制类型转换的结果保持位值不变,只是改变了这些位的解释方式。
无符号数与补码的转换关系:
U表示无符号数
对于C语言中:
若双方中同时存有无符号数与有符号数,C语言会隐式的将有符号数强制转换成无符号数来执行运算比如>和<运算。若双方都是U或都是T则用原来的处理。
数字的扩展
无符号数零扩展:在表示的开头补0
有符号数的符号扩展:扩展的数位补符号位
截断数字
直接把前k位舍弃
数值上:
截断无符号数:(相当于取模)
截断有符号数:相当于视为无符号数处理后再转换为无符号数。
整数的运算
无符号数加法
正常:直接相加 溢出:减去(即为扔去溢出位)
判断无符号加法溢出:return sum>=x;(true 表示未溢出)
求反:

有符号数的加法
分为正溢出和负溢出
补码加法和无符号加法有完全相同的位级表示
取反:
Tmin=0x8000000
无符号乘法:
截取运行结果的低w位
补码乘法:
与无符号乘法位级表示一样,数值上多一步转换成无符号数
乘2的幂相当于左移操作,乘常数就可以分解成移位和加法
除法
除以2的幂:
采用右移,无符号数逻辑右移,朝着向0的方向进行舍入。有符号数算数右移,也朝0舍入,所以会在移位之前加入一个偏置来修正。偏置的值等于1左移k位减1。//只有负数需要用偏置
不能推广到任意常数。
3. 浮点数
二进制小数:.后为2的负幂如(1/8)=
IEEE浮点表示:
s为符号位;M是尾数,是二进制小数;E是阶码
float 1-8-23
double 1-11-52
exp是无符号数
分类

规格化的值:exp不为0或255
非规格化的值:exp为0
无穷大:exp为255(全是1),frac全为0
NaN:exp为255,frac不为0
表示规格化的值时:
阶码字段为以偏置形式表示的有符号整数,E=e-Bias
(单精度为127,双精度为1023)
(float),,

表示非规格化的值时:
exp,s,frac全为0,表示+0,s=1,frac,exp为0,表示-0
此时M=f;E=1-Bias
特殊值: 表示无穷大
浮点数舍入
1. 向偶数舍入
向最近值进行舍入,为0.5则遵循最低有效数位是偶数
2. 向0舍入
3. 向下舍入
4. 向上舍入
浮点数运算不具有结合性与分配性,因为可能出现溢出和舍入。
LAB:
此章节后完成datalab(80.0/80.0)
