首页 > 编程语言 >阅读《程序是怎样跑起来的》三、四章分析

阅读《程序是怎样跑起来的》三、四章分析

时间:2024-02-18 23:34:22浏览次数:28  
标签:二进制 浮点数 程序 索引 地址 四章 内存 怎样 小数

目前阅读的这本书感觉真的非常棒,它真的在一点一点教会我怎样由浅入深的学习和理解计算机这门学科。在学习小数时大家可能会认为“万能的计算机是不会出现计算错的”。但实际上,依然存在程序运行后无法得到正确数值的情况。其中,小数运算就是一个典型的例子。在第2章中,我们对整数的二进制数表现方法做了说明。由于计算机内部所有的信息都是以二进制数的形式来处理的,因此在这一点上,整数和小数并无差别。不过,使用二进制数来表示整数和小数的备份方法却有很大的不同。
小数点后4位用二进制数表示时的数值范围为0.0000~0.1111。因此,这里只能表示0.5、0.25、0.125、0.0625这四个二进制数小数点后面的位权组合而成(相加总和)的小数。将这些数值组合后能够表示的数值,即为无序的十进制数。十进制数0的下一位是0.0625。因此,这中间的小数,就无法用小数点后4位数的二进制数来表示。同样,0.0625的下一位数一下子变成了0.125。这时,如果增加二进制数小数点后面的位数,与其相对应的十进制数的个数也会增加,但不管增加多少位,2的-00次幂怎么相加都无法得到0.1这个结果。实际上,十进制数0.1转换成二进制后,会变成0.00011001100.(1100循环)这样的循环小数。这和无法用十进制数来表示1/3是一样的道理。1/3就是0.3333…,同样是循环小数。至此应该明白了为什么用代码清单的程序无法得到正确结果了吧。因为无法正确表示的数值,最后都变成了近似值。
那什么是浮点数呢?很多编程语言中都提供了两种表示小数的数据类型,分别是双精度浮点数和单精度浮点数。双精度浮点数类型用64位、单精度浮点数类型用32位来表示全体小数。在C语言中,双精度浮点数类型和单精度浮点数类型分别用double 和 float来表示。不过,这些数据类型都采用浮点数来表示小数。浮点数是指用符号、尾数、基数和指数这四部分来表示的小数。
第四章主要是熟练使用有棱有角的内存。在之前的文章中提到内存,其实内存的物理机制是很简单的。接下来就来说说它为什么简单吧。内存实际上是一种名为内存IC的电子元件。虽然内存IC包括 DRAM、SRAM、ROM等多种形式,但从外部来看,其基本机制都是一样的。内存IC中有电源、地址信号、数据信号、控制信号等用于输入输出的大量引脚(IC的引脚),通过为其指定地址(address),来进行数据的读写。下面我们来看一下指针,指针是C语言的重要特征,但很多人都说它难以理解,甚至还有人因无法理解指针而对C语言的学习产生了很强的挫败感。指针也是一种变量,它所表示的不是数据的值,而是存储着数据的内存的地址。通过使用指针,就可以对任意指定地址的数据进行读写。虽然前面所提到的假想内存IC中仅有10位地址信号,但大家在 Windows 计算机上使用的程序通常都是32位(4字节)的内存地址。这种情况下,指针变量的长度也是32位。
下面让我们回到主题,解释一下本章标题中出现的“熟练使用有棱有角的内存”。首先,我们先来看一下内存最直接的使用方法。我们要用到数组。数组是指多个同样数据类型的数据在内存中连续排列的形式。作为数组元素的各个数据会通过连续的编号被区分开来,这个编号称为索引(index)。指定索引后,就可以对该索引所对应地址的内存进行读写操作”。而索引和内存地址的变换工作则是由编译器自动实现的。栈和队列,都可以不通过指定地址和索引来对数组的元素进行读写。需要临时保存计算过程中的数据、连接在计算机上的设备或者输入输出的数据时,都可以通过这些方法来使用内存。如果每次保存临时数据都需指定地址和索引,程序就会变得比较麻烦,因此要加以改进。栈和队列的区别在于数据出人的顺序是不同的。在对内存数据进行读写时,栈用的是LIFO(Last Input First Out,后人先出)方式,而队列用的则是FIFO(First Input First Out,先人先出)方式。如果我们在内存中预留出栈和队列所需要的空间,并确定好写人和读出的顺序,就不用再指定地址和索引了。

标签:二进制,浮点数,程序,索引,地址,四章,内存,怎样,小数
From: https://www.cnblogs.com/hhn-viyo/p/18020149

相关文章

  • 《程序是怎样跑起来的》第四章读后感
    在阅读《程序是怎样跑起来的》的第四章时,我仿佛被带进了一个全新的世界。这一章主要介绍了程序的运行原理以及计算机如何执行我们编写的代码。通过深入浅出的讲解和丰富的实例,作者成功地让我对程序的运行过程有了更清晰的认识。首先,我了解到程序的运行实际上是一系列指令的执行过......
  • 《程序是怎么跑起来》第三次观后感(8 9章)
    第八章讲的是源文件和源代码。源代码,记得有几次上机的时候,我们的老师让写书中的习题,我想那就是源代码。可是我不知道什么源代码,我自己理解的意思是最初的代码(在计算机中,源代码的定义为:某种编程语言编写的程序叫做源代码)。在读后第八章后,我有大概明白了,不过我们接触源代码还是挺多......
  • 《程序是怎样跑起来的》第五章读后感
    阅读完《程序是怎样跑起来的》的第五章,我对于计算机程序的运行有了更深入的理解。这一章主要介绍了程序的执行过程,包括编译、链接和加载等步骤,让我对计算机程序的生命周期有了清晰的认识。首先,我了解到程序的编译过程是将源代码转换为机器语言,以便计算机能够执行。编译器会逐行检......
  • 《程序是怎么跑起来》第4次观后感(10章)
    《程序是怎样跑起来的》第十章主要讲解了计算机程序的性能优化技术。作者指出,在开发大型复杂的程序时,性能是一个重要的考虑因素。作者介绍了性能优化的基本原则和方法,以提高程序的执行效率和响应速度。作者深入剖析了性能测试和分析的过程,包括代码剖析和性能测试工具的使用。然后......
  • 《程序是怎样跑起来的》第四章读书笔记
    《程序是怎样跑起来的》第四章读书笔记1, 内存的工作原理(1) 写入:VCC(电源)接上+5V电源(1),给GND接上0V(0)通过A0-A9的地址信号指定数据的存储位置,将要写入的数值输入数据信号D0-D9,最后将WR设置为1(2) 读取:通过A0-A9指定数据存储位置,将RD信号设置为12.数据类型:(1)数据类型不同它所占用的内......
  • 《程序是怎样跑起来的》第三章读后感
    在阅读《程序是怎样跑起来的》第三章之后,我对于计算机程序的运行机制有了更深入的理解。这一章主要介绍了程序的执行过程,包括指令的读取、解释和执行,以及数据在内存中的存储和处理。通过这些内容,我不仅了解到了程序背后的复杂性,也对计算机科学产生了更浓厚的兴趣。首先,我对于程序......
  • 程序是怎样跑起来的第八章读后感
    我认为第八章重点是源文件变成可执行文件的过程,在这个过程中会进行许多的步骤。对于计算机的运行来说,计算机只能运行本地代码,不是本地代码需要转变成本地代码。从第八章我们能更深层的来了解计算机语言,而C语言就是计算机的一种语言。C++是在C语言的基础上追加相应功能而开发出来的......
  • 《程序是怎样跑起来的》第三章读后感
    在此书第二章中,主要讲到了数据用二进制的表示方法,但只讲的是整数,而第三章讲到的则是小数用二进制的表示方法。如图,我是这样理解的,在一组数据中,十进制转换二进制,拿位权来讲,小数点前第n位,是2的n-1次幂(n≥1),而小数点后的转换则稍微不同,小数点后第n位,是2的-n次幂(n≥1)。出现数据有小数......
  • 《程序是怎样跑起来的》第一章其余节
    读书笔记:1.2:寄存器的类型及功能:累加器——存放执行运算的数据和运算结果;标志寄存器:存放运算后的CPU的状态;程序计算器:存放下一条指令所在内存的地址;基址寄存器:存放数据内存的起始地址;变址寄存器:存放基址寄存器的相对地址;通用寄存器:存放任意数据;指令寄存器:存放指令。这个寄存器由CPU......
  • 《程序是怎样跑起来的》第四章:熟练使用有棱有角的内存
    第四章深入探讨了计算机内存的奥秘。在此之前,我对内存的理解仅限于其作为数据存储的媒介,而这一章却让我看到了内存的多面性。内存,如同计算机的仓库,负责存储程序运行所需的数据和指令。但这个仓库并非毫无规则,而是有着严格的组织和结构。矢泽久雄以其独特的见解和深入浅出的方式,揭......