编译为32位机器码gcc -o m32 -m32 m32.c
教材导读 无符号编码基于传统的二进制表示法,表示大于等于零的数字。补码编码(有符号整数)可以为正或者负的数字。浮点数编码表示实数的科学计数法的以2位基数的版本。进制转换:以二进制结果作为中介。字节顺序:在几乎所有的机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中最小的地址。小端法:最低有效字节在前;大端法则反之。需注意,比如0x12345678,78是低位,12是高位。执行show-bytes.c。
位运算与逻辑运算:位运算是指两个或多个数值逐位运算,比如1011|0101=1111;逻辑运算只有真假即true false;非0即为真,0为假。比如1011||0101,1011和0101都是非0,所以等同于1||1,结果为真。0扩展:[1,0,1,1]->[0,0,0,1,0,1,1];符号位扩展[1,0,1,1]->[1,1,1,1,0,1,1]。整数运算的溢出:如9[1001]+12[1100]=21[10101],取4位的话5[0101]=21 mod 16。整数运算实际上是一种模运算形式。浮点数表示对形如V=x * 2^y的有理数进行编码。不太关注运算的精确性,而把实现的速度和简便性看得比数字精确性更重要。IEEE浮点标准用V = (-1)^s * M * 2^E的形式来表示一个数。其中s(sign)称符号,M(尾数)是二进制小数整数与浮点数转换规则:
int->float :不会溢出,可能舍入 int/float->double :保留精确数值 double->float :可能溢出成无穷,可能被舍入。 float/double->int :向0舍入。问题1解决方案:需要做的是先记住几个公式:
规格化值: E=e-Bias Bias=2^(k-1)-1 M=1+f e[k-1];f[n-1] 非规格化值: E=1-Bias Bias=2^(k-1)-1 M=f e[k-1];f[n-1] 特殊值: 阶码(e)全为1时,小数域(f)全为0时,得到的值表示无穷,小数域(f)不全为0时,结果值被称为“NaN”(Not a Number)。了解这些,来看书上的示例:
计算过程已经标注在图上。
运行结果截图:
20155313
结对学习内容 IEEE浮点标准。
计划学习时间:12小时
实际学习时间:15小时
转载于:https://www.cnblogs.com/zhuohua/p/7670371.html
