计算机中数值的表示方法

在进行编程算法的设计学习的时候,有一个问题是不可避免的,那就是数据类型的表示和其编码。因为要想使代码能够高效运行,就必然需要了解其特性。因此我又拿出了本科的《微机原理与接口技术》(姚琳等编著,清华大学出版社出版),重新学习一下数值的表示方法,并记录在此。

基本概念

1.编码

将非二进制形式表示的数值型数据转化为二进制形式表示,并最终实现在计算机的存储和处理的过程。
为什么需要进行编码这个问题就很简单了,因为计算机系统采用二进制表示和处理数据信息,所以计算机中的数值都需要二进制表示,字符就通过编码转化为二进制。

2.机器数与真值

一个数在计算机(机器)中的存储形式,称为机器数。、而这个以二进制形式表示的数的数值本身,称为该数的真值;真值的正负号用+和-表示的。而机器数的正负号使用0和1表示的。
机器数
机器数的表示位数受计算机系统的的数据位数限制。计算机系统为32位或者64位,则机器数也将是32位或者64位的。
举例
真值+52(十进制表示的真值) = +110100B(二进制形式的真值)
8位机器数:0011 0100 16位机器数:0000 0000 0011 0100
真值-52 = -110100
8位机器数:1011 0100 16位机器数:1000 0000 0011 0100

3.无符号数和有符号数

对于机器数,不需要考虑符号时,可以使用无符号数,这个时候,所有的二进制数位表示数的大小。这样,8位的二进制数能表示的最小数是0,最大值是2^8 -1 = 256 -1=255
对于需要政府特征的数,就用最高位表示符号,用剩余的低数码位表示绝对值,此时为带符号数。有符号数为了简化计算,又引入了下面的概念。

4.原码、反码、补码

当初学习这个的时候,没怎么搞清楚。其换算过程中变和不变比较难以理解记忆。
符号位数值位的确定
其实我们首先要注意的是,原码、反码、补码都是机器数的具体表现形式。这样它们都符合机器数的基本特点,就是最高位为符号位,0表示正数,1表示负数;其余位是数值位。数值位是原码、反码补码的不同之处。
原码的数值位 与真值的数值位相同;
反码的数值位 原码的数值位取反;
补码的数值位 正数的数值位与原码相同,负数的数值位为反码加1。

三者的关系
计算机中数值的表示方法_第1张图片
原码的特点是表示简单直观,与真值转换方便;不适合运算;
反码就是为了由原码计算补码方便;标准的过渡人!
补码的概念比较复杂,但是运算方便,所以主要用来运算。
下面再介绍一下补码的概念!

补码
先介绍一下 “模” 的概念
模是一个计数系统能够表示的数的最大容量,记为M。对于n位的计数系统,其模为 2^n。
这里特别注意的是,模的概念对应的是最大容量,也就是能放多少个数,而不是最大值!例如4位系统,最大值是 1111 = 15,其最大容量是2^4= 16。所以其模是16.
为什么要引入模这个概念呢?因为我们接着上面的问题继续看一下,就会发现模的一个有趣的特性,而补码就是由这个特性引出来的。
还是4位系统,最大值是15,此时加1,就是16了,二进制就是1 0000;而因为系统是4位的,在第5位的1将被舍弃,这样16在机器的实际存储是0000 = 0。这个有趣之处就是,2^n和0具有相同的表现形式。
对于补码的概念,我们考虑这样一个例子。
对于钟表,其模是12. 我们知道,对于钟表时针指向12时,我们将时针顺时针往前拨8个格,时针指向8;若逆时针拨4个格,时针也指向8. 也就是说 对于模为12 的系统中,加8和减4的效果是相同 的。那么这时候,8就是(-4)关于12 的补码。

基于补码的加减法

无符号位的加减法直接进行,没什么讨论的。
有符号数一般是以补码的形式进行,因为这样就可以将有符号数的运算转换成和无符号数那样简单—符号位和数值位都参与计算,获得的结果就包含了正确的符号位和数值位。

运算规则

[ X+Y ](补码形式) = [ X ](补码形式) + [ Y ](补码形式)
[ X-Y ](补码形式) = [ X ](补码形式) + [ -Y ](补码形式)

你可能感兴趣的:(计算机)