zoukankan      html  css  js  c++  java
  • 第二章 信息的表示和处理

        最近正在读《深入理解计算机系统》,这个分类是我阅读此书的笔记,以后每一章我都会做。希望通过这个博客系列来督促自己将此书深入学习下去。

        本章对现代计算机中数字在底层的表示和处理方式进行了介绍。主要讲解了三类数字表示:无符号数、补码和浮点数,前两种常用于形容整数,后两种用于形容小数。

         2.1 信息存储

         在现代的计算机中,我们将存储器一般视为一个非常大的字节数组——虚拟存储器。虚拟存储器中的存储单位为字节,这是计算机中可访问的最小存储单位。每一个字节由唯一的数字来标识,这就是所谓的地址。虚拟存储器是计算机存储结构的一个抽象实现。

        十六进制表示法。

        每一个计算机都有一个字长,它决定了虚拟存储器地址的取值范围:对一个字长为w位的机器,虚拟地址的范围为0~2w-1。

        熟悉C语言各类型(如int、long、char、float、double等)的字节长度,注意在不同字长的系统(32或64位)中,其大小可能会不同。

        大端法、小端法了解,注意在不同机器里具体的实现可能是不同的。(很多操作系统如Windows、Linux目测都采用的是小端法)

        常见的布尔运算以及C语言的位操作运算:&(与)、^(异或)、|(或)、~(非)。

        2.2 整数表示

        整数表示有两种方式:无符号数编码和补码编码,在C语言中,前者用于表示unsigned 类型的数据(无符号整数),后者用于表示int类型的数据(有符号整数)。

        由于不同机器上对于不同的类型有不同的位表示,为了统一,在C语言的stdint.h中提供了一组整数类型,形如intN_t和uintN_t,从而实现了平台无关性。

        对于不同类型数值的转换,一般位模式不变。

        当执行一个运算时,如果两个数一个是有符号一个是无符号的,那么C语言会隐式地将有符号数首先转换为无符号数,然后再进行比较,这在有些时候可能会造成一些问题。另外,如果位不一致,首先会改变大小,其次再更改符号。

        2.3 整数运算

        有可能会发生溢出,判断方法:

         对于无符号数,s=x+y,当且仅当s<x(或s<y)时发生溢出。

         对于有符号数,当x和y都是负数,但x+y>=0时,或x、y均为正数,x+y<0时发生溢出。

         练习题2.35讲解了如何判断乘法溢出。

         对于乘法运算,可以通过以移位、加法和减法的组合来简化计算过程;除法运算只有除以2的幂时才可以这么做。

         2.4 浮点数

         IEEE提出了浮点数的标准754,现今大部分计算机都支持该标准。

          IEEE的标准中,用(-1)s*M*2E的形式来表示一个数,表示的数分为规格化值、非规格化值(+0、-0)、特殊值(+∞、-∞和NaN)三种情况,可以表示单精度(32位)和双精度(64)位浮点数。

          在计算机系统中,浮点格式所能表示的数是有限的,对于超出范围的数,常利用舍入的方法进行逼近。从统计偏差考虑,引入的是偶数舍入法。

          和整数计算不同,浮点数计算不支持结合性与分配性,但仍满足单调性。

  • 相关阅读:
    定时器
    js中script的上下放置区别 , Dom的增删改创建
    函数声明与应用
    常规选择器
    表格的制作
    流程控制
    For循环
    洛谷P1419寻找段落
    洛谷P1021邮票面值设计
    洛谷P3119草鉴定
  • 原文地址:https://www.cnblogs.com/wickedpriest/p/4560925.html
Copyright © 2011-2022 走看看