您的位置:首页 > 理论基础

深入理解计算机系统--信息表示和处理

2014-03-08 21:40 519 查看
第二章 学习小记

3月3日买上这本书,每天都在看,现在一周后看完了前两章。

原来就听说这本书很好,这学期也学计算机组成原理,就买来学习。

首先一个感受是知道了学这些很细微的系统方面的知识对编程意义。

有符号数到无符号数的隐式强制类型转换可能导致程序错误,如getpeername的安全漏洞,还有如乘法的溢出。原来写一些代码都没有考虑过安全性,现在觉得要注重这些细节,养成好的习惯。

还有这本书确实比教科书讲的深入。

浮点表示IEEE754标准中有一个阶码要偏置是2^(n-1)-1,而非通常的2^(n-1),这本书讲的很详细,是因为从非规格化值平滑转换到规格化的值。并通过具体的例子看出补偿非规格化数的尾数没有隐含开头的1,所以这样设置偏置值。

#include<stdio.h>//本觉得书B28上的一个小程序没什么意思,仔细探究了一下还挺深的...

typedef unsigned char *byte_pointer;//强制类型转换

void show_bytes(byte_pointer start,int len)
{
int i;
for(i = 0;i < len;i++)
{
printf("%.2x ",start[i]);//.2x 整数必须用至少两个数字的十六进制格式输出
}
printf("\n");
}

void show_int(int x)
{
show_bytes((byte_pointer) &x,sizeof(int));
}

void show_float(float x)
{
show_bytes((byte_pointer) &x,sizeof(float));
}

void show_pointer(void *x)
{
show_bytes((byte_pointer) &x,sizeof(void *));
}

int main()
{
float x = -0.5;
//show_int(x);//{cc*4}
show_float(x);//{cc*4}
//show_pointer(x);//{cc*4}
return 0;
}

/*
结论:little endian用小端法存数

如果不初始化x,结果都为:cc cc cc cc

x = 1: 01 00 00 00
x = 1000: e8 03 00 00
x = 1024: 00 04 00 00
x = 0: 00 00 00 00
x = -0.5: 00 00 00 bf
x = -1: ff ff ff ff
x = -2: fe ff ff ff

x = 0.1: cd cc cc 3d //会有误差
x = 0.5: 00 00 00 3f
x = 1.5: 00 00 c0 3f
x = 173507: c0 70 29 48 //p48 计组书上此题不是用的IEEE 754标准
x = 22.78125: 00 40 b6 41 //p58

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  计算机