随笔分类 - 程序是怎样跑起来的
计算机组成原理
摘要:栈和队列,都可以不通过指定地址和索引来对数组的元素进行读写。需要临时保存计算过程中的数据、连接在计算机上的设备或者输入输出的数据时,都可以通过这些方法来使用内存。如果每次保存临时数据都需指定地址和索引,程序就会变得比较麻烦,因此要加以改进。 栈和队列的区别在于:数据出入的顺序是不同的。在对内存数据进
阅读全文
摘要:数组是指多个同样数据类型的数据在内存中连续排列的形式。作为数组元素的各个数据会通过连续的编号被区分开来,这个编号称为索引(index)。指定索引后,就可以对该索引所对应地址的内存进行读写操作。而索引和内存地址的变换工作则是由编译器自动实现的。 代码清单4-3表示的是在C语言中定义char类型、sho
阅读全文
摘要:指针也是一种变量,它所表示的不是数据的值,而是存储着数据的内存的地址。通过使用指针,就可以对任意指定地址的数据进行读写。虽然前面所提到的假想内存IC中仅有10位地址信号,但大家在Windows计算机上使用的程序通常都是32位(4字节)的内存地址。这种情况下,指针变量的长度也是32位。 请大家看一下下
阅读全文
摘要:虽然内存的实体是内存IC,不过从程序员的角度来看,也可以把它假想成每层都存储着数据的楼房,并不需要过多地关注内存IC的电源和控制信号等。因此,之后的讲解中我们也同样会使用楼房图(或者与楼房相似的图)。内存为1KB时,表示的是如图4-3所示的有1024层的楼房(这里地址的值是从上往下逐渐变大,不过也有
阅读全文
摘要:1.有十个地址信号引脚的内存IC(集成电路)可以指定的地址范围是多少?答:用二进制数来表示的话是0000000000~1111111111(用十进制数来表示的话是0~1023) 2. 高级编程语言中的数据类型表示的是什么?答:占据内存区域的大小和存储在该内存区域的数据类型 3.在32位内存地址的环境
阅读全文
摘要:最后再补充说明一下二进制数和十六进制数的关系。在以位为单位表示数据时,使用二进制数很方便,但如果位数太多,看起来就比较麻烦。因此,在实际程序中,也经常会用十六进制数来代替二进制数。在C语言程序中,只需在数值的开头加上Ox(0和x)就可以表示十六进制数。 二进制数的4位,正好相当于十六进制数的1位。例
阅读全文
摘要:计算机计算出错的原因之一是,采用浮点数来处理小数(另外,也有因“位溢出”而造成计算错误的情况)。作为程序的数据类型,不管是使用单精度浮点数还是双精度浮点数,都存在计算出错的可能性。接下来将介绍两种避免该问题的方法。 (1)是回避策略,即无视这些错误。根据程序目的的不同,有时一些微小的偏差并不会造成什
阅读全文
摘要:该程序执行后,十进制数0.75用单精度浮点数来表示就变成了0-01111110-10000000000000000000000(图3-7)。 加入破折号(-)是为了区分符号部分、指数部分、尾数部分。这里,符号部分为0,指数部分为01111110,尾数部分为1000000000000000000000
阅读全文
摘要:尾数部分使用正则表达式(按照特定的规则来表示数据的形式即为正则表达式,除小数外,字符串以及数据库等都有各自的正则表达式),可以将表现形式多样的浮点数统一为一种表现形式。例如,十进制数0.75就有很多种表现形式,如下图所示: 虽然它们表示的都是同一个数值,但因为表现方法太多,计算机在处理时会比较麻烦。
阅读全文
摘要:像1011.0011这样带小数点的表现形式,完全是纸面上的二进制数表现形式,在计算机内部是无法使用的。那么,实际上计算机是以什么样的表现形式来处理小数的呢?我们一起来看一下。很多编程语言中都提供了两种表示小数的数据类型,分别是双精度浮点数和单精度浮点数。双精度浮点数类型用64位、单精度浮点数类型用3
阅读全文
摘要:由于前一节了解到将小数二进制数转换成十进制数的方法后,计算机运算出错的原因也就容易理解了。之所以容易出错的原因是“有一些十进制数的小数无法转换成二进制数。例如:十进制数是0.1,就无法用二进制数表示。 上图是小数点后四位能够用二进制数表示的数值(二进制数是连续的,十进制数是非连贯的)。 同时通过这个
阅读全文
摘要:小数点前面部分的转换方法:将各数位数值和位权相乘,然后再将相乘的结果相加即可实现。 小数点后面部分的转换方法:将各数位的数值和位权相乘的结果相加。
阅读全文
摘要:首先,我们来看一个计算机运算错误(无法得到正确结果)的例子。下图是将0.1累加100次,然后将结果输出到显示器上的C语言程序。 运行过程是这样的: 首先把0赋值给变量sum,然后在此基础上累加100次0.1。sum+=0.1;表示为现在的sum值加0.1。for(i=1;i<=100;i++).)表
阅读全文
摘要:将二进制数表示的信息作为四则运算的数值来处理就是算术。而像图形模式那样,将数值处理为单纯的0和1的罗列就是逻辑。 计算机能处理的运算,大体可分为算术运算和逻辑运算。算术运算是指加减乘除四则运算。逻辑运算是指对二进制数各数字位的0和1分别进行处的运算,包括逻辑非(NOT运算)、逻辑与(AND运算)、逻
阅读全文
摘要:接下来我们就一起来看看表示负数的方法和右移的方法:二进制数中表示负数值时,一般会把最高位作为符号来使用,因此我们把这个最高位称为符号位。符号位是0时表示正数,符号位是1时表示负数。计算机在做减法运算时,实际上内部是在做加法运算。用加法运算来实现减法运算,为此,在表示负数时就需要使用“二进制的补数”。
阅读全文
摘要:在了解了二进制数的机制后,接下来我们来看一下运算。和十进制数一样,四则运算同样也可以使用在二进制数中,只要注意逢2进位即可。下面,我们就来重点看一下二进制数所特有的运算。二进制数所特有的运算,也是计算机所特有的运算,因此可以说是了解程序运行原理的关键。移位运算指的是将二进制数值的各数位进行左右移位(
阅读全文
摘要:首先让我们来看一下二进制数转换成十进制数的方法:接下来,让我们来解释一下各数位的数值和位权相乘后“相加”这个处理的原因。其实大家所说的数值,表示的就是构成数值的各数位的数值和位权相乘后再相加的结果。例如39这个十进制数,表示的就是30+9,即各数位的数值和位权相乘后再相加的数值。所有数的0次幂都是1
阅读全文
摘要:在C和Java等高级语言编写的程序中,数值、字符串和图像等信息在计算机内部都是以二进制数值的形式来表现的。也就是说,只要掌握了使用二进制数来表示信息的方法及其运算机制,也就自然能够了解程序的运行机制了。IC的一个引脚,只能表示两个状态。IC的这个特性,决定了计算机的信息数据只能用二进制数来处理。由于
阅读全文
摘要:机器语言指令的主要类型和功能:数据转送指令:寄存器和内存、内存和内存、寄存器和外围设备之间的数据读写操作运算指令 :用累加寄存器执行算术运算、逻辑运算、比较运算和移位运算跳转指令 :实现条件分支、循环、强制跳转等call/return 指令: 函数的调用/返回调用前的地址
阅读全文
摘要:CPU会把基址寄存器+变址寄存器的值解释为实际查看的内存地址。变址寄存器的值就相当于高级编程语言程序中数组的索引功能。数组是指同样长度的数据在内存中进行连续排 列的数据构造。用一个数组名来表示全体数据,通过索引来区分数组的各个数据(元素)。例如,一10个元素的数组a,其中的各个 数组a数据就用 a[
阅读全文
浙公网安备 33010602011771号