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

来源:互联网 发布:在澳洲可以用淘宝吗? 编辑:程序博客网 时间:2024/05/16 19:19

第二章 学习小记

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*/ 



0 0
原创粉丝点击