C++学习笔记(基础002--信息的存储方式)
本文为个人学习笔记,参考自:《C++程序设计(第4版)》
0.02 信息的存储方式
一、信息
计算机加工的对象是数据信息,而指挥计算机操作的是控制信息,因此计算机内部的信息可以分为两大类。
- 控制信息(指令、控制字)
- 数据信息(数字信息<定点数、浮点数>、非数值信息<字符数据、逻辑数据>)
人们最熟悉十进制数系,但是几乎所有的计算机采用的都是二进制数系。
所有的外界信息在被转化为不同的二进制数后,计算机才能对其进行传送、存储和加工处理。
二、采用二进制码表示信息优点:
1/ 易于物理实现
具有两种稳定状态的物理器件很多,如门电路的导通与截止,电压高低,恰好对应1与0
2/ 二进制数运算简单
对R进制的算数求和、求积规则各有R(R+1)/2种
3/ 机器可靠性高
电压高低、电流的有无都是质的变化,两种状态分明。基2码的传递抗干扰能力强,鉴别信息可靠性高
4/ 通用性强
基2码成功地运用于数值信息编码(二进制),还适用于各种非数值信息的数字化编码。
特别是仅有的两个符号0和1正好与逻辑命题的两个值真与假相对应,从而为计算机实现逻辑运算和逻辑判断提供了方便。
当进行程序设计时,与二进制进行转换比较方便的八进制、16进制系表示法也经常使用。
无论哪种数系,其共同之处都是进制记数制。
三、几种进制之间转换:
-
R进制->十进制
基数为R的数字,只要将各位数字与它的权相乘,其积相加,和数就是十进制数。
如: -
十进制->R进制
可将整数和小数分别转换在拼接。
-
整数:(除R取余法)用10进制数连续除以R,它的余数即为相应R进制数的各位系数
-
小数:(乘R取整)连续乘以R,得到的整数即组成R进制的数。
-
-
二、八、十六进制的相互转换
四、信息的存储单元
计算机内部,各种信息都是以二进制编码形式存储。
信息的单位通常采用 位、字节、字。
- 位(bit):量度数据的最小单位,表示1位二进制信息
-
字节(Byte):信息存储中最常用的基本单位(1字节=8位)
1Byte = 8bit 1K = 1024B
1M = 1024K 1G = 1024M - 字(Word):字是位的组合,并作为一个独立的信息单位处理。字又称为计算机字,它的含义取决于机器的类型、字节、使用者要求。常见的固定字长有8位、16位、32位等。
信息单位用来描述机器内部数据格式,即数据(包括指令)在机器内的排列形式,如:单字节数据、可变长数据(以字节为单位组成几种不同长度的数据格式)等。
- 机器字节:在讨论信息单位时,还有一个与机器硬件指标有关的单位,这就是机器字长。 机器字长一般指参加运算的寄存器所含有的二进制数的位数,它代表了机器的精度,如32位、64位等。
五、二进制数的编码表示
一个数在机内的表达形式称为”机器数“,而它代表的数值称为此机器数的”真值”。
计算机内,用0表示正号,1表示负号,符号位放在数的最高位。
数值信息在计算机内采用符号数字化处理后,计算机便可以识别和表示数符了。
为了改进符号数的运算方法和简化运算器的硬件结构,人们研究了符号数的多种二进制编码方法,其实质是对负数表示的不同编码。
常用的编码:
-
原码
符号位数字化为0或1,数的绝对值与符号一起编码,即所谓“符号-绝对值表示”的编码,称为原码。
如果用一个直接存放一个整数,原码表示如下:
-
反码
正数的反码与原码相同。
负数的反码与原码如下关系:
负数反码的符号位与原码相同(仍用1表示),其余各位取反(0变1,1变0).
-
补码
-
模数:
模数从物理意义上讲,是某种计量器的容量。
在模式系统中,8-2=(8+10)mod 12
之所以上式成立,是因为2与10对模数12是互为补数的(2+10=12).因此可以认为:在模数系统中,一个数减去另一个数,或者说加上一个负数,等于第一个数加上第二个数的补数。上面的,我们称10为-2在模12下的“补码”。负数采用补码表示后,可以使加减法统一为加法运算。
计算机中,机器表示数据的字长是固定的。对于n位数来说,模数的大小是:n位数全为1,且最末位再加1.实际上模数的值已经超过了机器所能表示的数的范围,因此模数在机器中是表示不出来的。若运算数大于模数,这模数自动丢掉,也就等于实现了取模运算。
如果有n位整数(包括一位符号位),则它的模数为2的n次幂;如果有n位小数,小数点前一位为符号位,则它的模数为2。
-
补码表示法
由上,对于一个二进制负数,可用其模数与真值做加法(模减去该数的绝对值)求得其补码。
由于机器中不存在数的真值形式,用上述公式求补码在机器中不易实现,但是上式可以导出一个简便方法:
-
补码运算规则
采用补码表示的另一个好处就是当数值信息参与算数运算时,采用补码方式是最方便的。
首先,符号位可作为数值参与运算,最后仍可得到正确的结果符号,符号无须单独处理;其次,采用补码进行运算时,减法运算可转换为加法运算,简化了硬件中的运算电路。
由于字长只有8位,因此加法最高位的进位自然丢失,达到了取模效果(即丢掉一个模数)
注意:补码运算的结果仍为补码。
上例中结果为正,所以补码即为原码,转为10进制为57.若结果为负,则是负数的补码形式,若要变成原码,需要对补码再求补,即可还原为原码。
-
六、定点数和浮点数
七、数的表示范围
八、非数值信息的表示