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

第二章 学习小记

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

*/ 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值