二进制表示整数、浮点数的方法

二进制表示整数、浮点数的方法

二进制数(binary number)用 2 个数字作基础,其中每一个二进制数字(称为位,bit)不是 0 就是 1。在书写较大的二进制数时,有些人喜欢每 4 位或 8 位插入一个点号,以增加数字的易读性。比如,1101.1110.0011.1000.0000 和 11001010.10101100。

源码、补码、反码

根据冯·诺依曼提出的经典计算机体系结构框架,一台计算机由运算器、控制器、存储器、输入和输出设备组成。其中运算器只有加法运算器,没有减法运算器。所以计算机中没办法直接做减法的,它的减法是通过加法实现的。现实世界中所有的减法也可以当成加法的,减去一个数可以看作加上这个数的相反数,但前提是要先有负数的概念,这就是为什么不得不引入一个符号位。原码、反码、补码的产生过程就是为了解决计算机做减法和引入符号位的问题。

源码:

是最简单的机器数表示法,用最高位表示符号位,其他位存放该数的二进制的绝对值。

0001+0010=0011,1+2=3; 0000+1000=1000,+0+(-0)=-0; 0001+1001=1010,1+(-1)=-2。

于是可以看到其实正数之间的加法通常是不会出错的,因为它就是一个很简单的二进制加法,而正数与负数相加,或负数与负数相加,就要引起莫名其妙的结果,这都是符号位引起的。0分为+0和-0也是因它而起。
负数的的反码 = 它的原码符号位不变,其他位取反(0 ->1 ; 1->0 );负数的补码 = 它的反码 +1;无符号整数的源码、反码、补码是一样的。

整数二进制表示

其中有:整型(integer),无符号数(unsigned),有符号数(signed)。

  • 无符号整型表示

数据在计算机中的表示有位宽(bits)要求,这是由于寄存器或存储单元有位宽限制,常见的位宽有8bits(字节),16bits(半字),32bits(字),64bits(双字),
甚至有128bits。正因为如此,我们使用C语言定义整型变量时,需要考虑变量是short,int,long或是long long。假设位宽为4bits,则能表示最小的数为(0000),
最大的数为(1111):

  • 有符号数整型表示

浮点数二进制表示

IEEE浮点标准用 的形式表示一个小数:
S表示符号,位数为1,s=1表示负数,s=0表示正数;
M表示尾数,是有效数字位数用k表示,是二进制小数,取值范围为[0,1),或者[1,2);
E表示阶码,位数用n表示,作用是对浮点数进行加权。
举例来说,十进制的5.0,写成二进制是101.0,相当于1.01×2^2。那么,按照上面V的格式,可以得出s=0,M=1.01,E=2
m称作尾数,用原码表示。e称作阶数,用补码表示

posted on 2021-03-08 14:22  Ultraman_X  阅读(355)  评论(0编辑  收藏  举报

导航