• 2019年2月22日 深入理解计算机系统(CS:APP)第二章 信息的表示和处理


    数据位+解释可以定义数据,第二章主要介绍信息的存储、整数、浮点数的相关内容。

    浮点数溢出将会成为正无穷大。


    2.1 信息存储

    (2.1.2 字、2.1.3 数据大小、2.1.4 寻址和字节顺序、2.1.5 表示字符串、2.1.6表示代码、2.1.7 布尔代数和环、2.1.8 C中的位运算逻辑运算位移)

    1. 八个位(bit)组合成块成为字节(byte),作为最小的可寻址存储单位。

    2. 单个字节的表示范围为 0~255(10进制整数),00 ~ FF (16进制),也就是说,十六进制一个字符表示4个bit。

    3. 每台计算机会有字长(word size)概念,指明整数和指针的标称大小(nominal size),过去主要为32位,现在大部分是64位,也就是8字节。

    4. 大小端(big endian little endian)的区别在于存储一个数据(字长,如int 0x12345678)时,地址从低到高,大端按字节从高到低,小端按字节从低到高存储。

    5. 大小端目前涉及两个地方需要注意:A. 跨机器网络通信,需要转网络序或统一。 B. 阅读汇编或底层字节,主要注意大小端。

    6. 通常我们使用 unsigned char * 作为指向字节的指针描述,声明每个字节都是一个非负正数。

    7. 围绕二进制演化出的布尔代数,包含“与或非”三类主要运算,以及异或。

    8. 环:<集合、运算符、单位元>,例如整数集合<Z,+,x,-,0,1>,布尔代数<{0,1},|,&,~,0,1 >

    9. C语言在逻辑运算符中存在阻断特性,p&&*p++不会导致引用空指针。


    2.2 整数的表示

    1. 一个64位整数,最大值是2147483647,也就是21亿,无符号的话也就是42亿。

    2. 为了让计算机支持带符号数的计算(减法),提出了反码和补码的概念。

    3. 由于数字位表示及C语言中强转的特殊性,需要特别注意无符号整数(特别是在与有符号数的运算中)以及位移(位移操作在补位时存在一定规律而非完全补0)

    4. 无符号整数在连续相加后会溢出,而有符号整数会出现正溢出和负溢出。

    image

    image

    (这里可能比较难理解,举个栗子,在补码加法中,8+2=-6为正溢出,-2+-8=6为负溢出)


    3. 浮点数

    1. 如同十进制的小数是分为整数、小数部分,并且分别用10的n次幂来表示每个位置的值(n为整数而非正整数)。

    2. 在计算机中的浮点数,采用2的n次幂(n为整数),每个位置为0、1表示,这样,采用x(y/z)的形式来不断逼近浮点数的目标值。

    3. 举个栗子,计算机使用浮点数表示 1/5,近似值可以为 0.00110011(2次幂),即为 51/256 等于 0.19921875。

    4. 关于浮点数的一个简单例子,在传统IA32处理器中,寄存器中可以保存扩展精度的浮点数(80位),因此,当出现寄存器和内存中双精度的浮点数比较时,就可能出现误差,总而导致不相等的情况。(O2优化开启时)

    image

  • 相关阅读:
    [Oracle]快速生成大量模拟数据的方法
    [Oracle]Oracle Fail Safe 与 SQLNET.AUTHENTICATION_SERVICES关系
    [Oracle]构筑TDE 环境的例子
    [Oracle]包含了MVIEW的表领域,在进行导出,表领域改名,再导入后,MVIEW会消失不见。
    [python][spark]wholeTextFiles 读入多个文件的例子
    [Spark][Python]RDD flatMap 操作例子
    Android 仿知乎创意广告
    移动端强大的富文本编辑器richeditor-android
    Python-Flask实现电影系统管理后台
    俄罗斯方块-C语言-详注版
  • 原文地址:https://www.cnblogs.com/seenthewind/p/10489645.html
Copyright © 2020-2023  润新知