二进制小数

二进制小数
二进制小数

第九讲二进制小数

我们曾经学了二进制以及八,十六及各种进制的整数,以及它们的加减乘除四则运算.大家必然会提问:与十进制分数、小数类似的二进制分数、小数,如何推广过来?

一个二进制小数,不妨先讲纯小数:0<n<1,

n=0.b1b2b3…b i…,每个b i或为0,或为1.(b i不全为0,也不全为1).

……

二进制小数的运算也和十进制小数运算相类似,差别在于这里是“逢二进一”,“退一还二”.

十进制小数化为二进制小数,主要通过分数作中间媒介.

例将(0.3)10化为二进制小数.(用(a)k表示k进位数).

这表示十进制有限小数可能化成二进制循环小数.

本节重点讲二进制循环小数如何化为二进制分数.回忆十进制循环小数化分数,一是要学习推理中的思想方法,二是最好归纳成一个易用易记的公式.

十进制循环小数化分数一般公式:

这些公式的推导过程如下,请体会思想方法.

齐,消去了让人“害怕”的无限长(虽然是循环)的小数):

至于混循环,只要借用已证得的公式①,因为

其实公式②中,当s=0时,就是公式①,复杂的公式②是借用简单情况下的公式①推来.推出后①包含在②之中.

对于二进制循环小数化二进制分数,也可同样推导.

至于二进制混循环小数:也记这小数的整体为S.

从推导和记忆规则看,公式(1)和(2)与十进制公式①和②相仿.那么读者一定会归纳出任意进制的循环小数化分数的公式.

解:用公式(1)

例3 化(0.100111011)2为二进制分数.

解:由公式(2)

直接检验

现在再看推导公式的方法,关键是把循环小数的值设为S,好比列方程设未知数,而10k S-S恰好消去了“烫手”的无限长的小数部分,

推出“方

这样的思想,在研究等比数列时也用到了.以前讲过有限项数列:a1,a2,a3,…,a i,…,a n.所谓等比数列,即它每一项都是前一项乘上一公共值q,也即:

a1,a2=a1q,a3=a2q,…,a i=a i-1q,…,a n=a n-1q,

a1,a2=a1q,a3=a1q2,…,a i=a1q i-1,…,a n=a1q n-1.

现在要求出a1+a2+a3+…+a i+…+a n.

思想方法:第一步:

设S=a1+a2+…+a n=a1+a1q+a1q2+…+a1q n-1.

上式两边乘上q,作为第二步:

qS=a1q+a1q2+…+a1q n-1+a1q n.

当q<1时,用上式两边减下式两边,得到

S-qS=a1-a1q n,

公式(3)称为公比小于1的等比级数前n项求和公式.它叙述为:前n项和等于首项与首项乘公比的n次幂的差除以1与公比之差.

例4

最后以一个很精彩的例来结束本节(本例选自美国1993年第四十四届高中数学竞赛第30题.虽是高中竞赛题,但本讲知识可解此题)

例5 x0是任意取定的数,满足0≤x0<1,对于所有的自然数n,x n 由下述递推的关系式确定:

求使得x0=x5的x0的个数.

分析所谓递推关系式,就是一旦给定了一个初始值x0,例如取x0=

总之,后项取决于前项的2倍值,当前项2倍值大于1时,就取该值;不小于1时(决不会超过2)就取它与1的差值.)

如果我们设x0是一个二进制小数,即设x0=(0.d1d2d3…)2,那么

2x0=(10)2×(0.d1d2d3...)2=(d1.d2d3d4 (2)

即2x0。只是把x0的二进制表示中的小数点向右移一位.因此

2x0<1相当于d1=0,2x0≥1相当于d1=1;那么按递推关系式的规定,x1变得特别简明:

x1=(0.d2d3d4d5 (2)

因为如果d1=0,即2x0<1,则x1=2x0=(0.d2d3d4…)2;如果d1=1,即2x0≥1,则x1=2x0-1=(1.d2d3d4…)2-1=(0.d2d3d4…)2,同样的规律,在由x i求x i+1时也成立,i=1,2,…,即

x2=(0.d3d4d5d6...)2;x3=(0.d4d5d6 (2)

x4=(0.d5d6d7...)2;x5=(0.d6d7d8 (2)

按条件应有x0=x5,即:

(0.d1d2d3d4d5d6d7d8d9d10...)2=(0.d6d7d8d9d10d11d12d13 (2)

这相当于x0是循环节为5的二进制纯循环小数,即

由于每一个d i的值,只有0,1两种可能,所以:

x0有25=32个可能值,它们依小到大排成:

但别忘了题设限定0≤x0<a,x0小于1,而由公式(1)知循环小数

习题九

1.请你写出把三进制循环小数化为分数的公式:

2.把下列十进制小数化二进制小数.

(0.1)10(0.01)10

3.把下面各循环小数化为分数,注意进制,并请把4个数由小到大排序.

4.循环小数化十进制分数:

6.仿例5,设x0是0≤x0<1的数,并对所有自然数n有递推式:

求使得x0=x3的x0的所有可能值(用三进制求解),并把最小的和最大的非零数化十进制数验证.这里[x]表示取x的下整数.即不超过x的最大整数.

7.同本讲最后一例中各条件,0≤x0<1,递推式

当2x n-1<1时,

当2x n-1≥1时,(n为自然数).改动为:求使x0=x3的所有十进制的x0值.

十进制小数转换为二进制小数教学提纲

十进制小数转换为二 进制小数

十进制小数转换为二进制小数 十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,此时0或1为二进制的最后一位。或者达到所要求的精度为止。 然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。 十进制小数转二进制 如:0.625=(0.101)B 0.625*2=1.25======取出整数部分1 0.25*2=0.5========取出整数部分0 0.5*2=1==========取出整数部分1 再如:0.7=(0.1 0110 0110...)B 0.7*2=1.4========取出整数部分1 0.4*2=0.8========取出整数部分0 0.8*2=1.6========取出整数部分1 0.6*2=1.2========取出整数部分1 0.2*2=0.4========取出整数部分0 0.4*2=0.8========取出整数部分0 0.8*2=1.6========取出整数部分1 0.6*2=1.2========取出整数部分1

0.2*2=0.4========取出整数部分0 转:十进制小数转化为二进制小数 一、二进制数转换成十进制数 由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为"按权相加"法。 例1105把二进制数110.11转换成十进制数。 注意2的负一次方,负二次方…… 二、十进制数转换为二进制数 十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。 1. 十进制整数转换为二进制整数 十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,

IEEE浮点数的表示方法及规则

计算机组成原理课程作业报告 解决的问题: IEEE浮点数的表示方法及规则 班级: 10021101 学号: 2011302610 姓名:最天使 日期: 2013年10月29日

一、什么是IEEE754标准 1.两种基本浮点格式:单精度和双精度; 2.两种扩展浮点格式:单精度扩展和双精度扩展; 3.浮点数运算的准确度要求:加、减、乘、除、平方、余数,将浮点格式的数舍入为整数值; 4.在十进制字符串和两种基本浮点格式之一的二进制浮点数格式之间的转换的准确度、单一性和一致性要求; 5.五种异常:乘、除、平方根、余数、在不同浮点格; 6.四种舍入方向: ①向最接近的可表示的值:Round(0.5) = 0; Round(1.5) = 2; Round(2.5) = 2; ②当有两个最接近的可表示的值时首选“偶数”值; ③向负无穷大(向下):floor(1.324) = 1 floor(-1.324) = -2 ④向正无穷大(向上)以及向(截断):C/C++ 函数ceil() ceil(1.324) = 2 Ceil(-1.324) = -1; 二、IEEE754表示浮点数的格式参数: 类型存储位数偏移值 数符S (位)阶码E (位) 尾数M (位) 总位数 (位) 十六进制十进制 短实数 1 8 23 32 0X7FH +127 长实数 1 11 52 64 0X3FFH +1023 临时实数 1 15 64 80 0X3FFFH +16383 特殊情况: 对于阶码为0或者255时,IEEE有特殊的规定: 1.如果E是0并且M是0,这个数+0(和符号位相关); 2.如果E=2-1并且M是0,这个数是正负无穷大(和符号相关); 3.如果E=2-1并且M不是0,这个数表示为不是一个数(NaN)。

二进制小数

二进制小数 我们曾经学了二进制以及八,十六及各种进制的整数,以及它们的加减乘除四则运算.大家必然会提问:与十进制分数、小数类似的二进制分数、小数,如何推广过来? 一个二进制小数,不妨先讲纯小数:0<n<1, n=,每个bi或为0,或为1.. 二进制小数的运算也和十进制小数运算相类似,差别在于这里是逢二进一,退一还二.十进制小数化为二进制小数,主要通过分数作中间媒介. 例将10化为二进制小数.k表示k进位数). 这表示十进制有限小数可能化成二进制循环小数. 本节重点讲二进制循环小数如何化为二进制分数.回忆十进制循环小数化分数,一是要学习推理中的思想方法,二是最好归纳成一个易用易记的公式. 十进制循环小数化分数一般公式: 这些公式的推导过程如下,请体会思想方法. 齐,消去了让人害怕的无限长的小数): 至于混循环,只要借用已证得的公式①,因为 其实公式②中,当s=0时,就是公式①,复杂的公式②是借用简单情况下的公式①推来.推出后①包含在②之中. 对于二进制循环小数化二进制分数,也可同样推导. 至于二进制混循环小数:也记这小数的整体为S. 从推导和记忆规则看,公式和与十进制公式①和②相仿.那么读者一定会归纳出任意进制的循环小数化分数的公式. 解:用公式 例3 化2为二进制分数. 解:由公式 直接检验 现在再看推导公式的方法,关键是把循环小数的值设为S,好比列方程设未知数,而10kS-S恰好消去了烫手的无限长的小数部分,推出方 这样的思想,在研究等比数列时也用到了.以前讲过有限项数列:a1,a2,a3,,ai,,an.所谓等比数列,即它每一项都是前一项乘上一公共值q,也即: a1,a2=a1q,a3=a2q,,ai=ai-1q,,an=an-1q, 或 a1,a2=a1q,a3=a1q2,,ai=a1qi-1,,an=a1qn-1. 现在要求出a1+a2+a3++ai++an. 思想方法:第一步: 设S=a1+a2++an=a1+a1q+a1q2++a1qn-1. 上式两边乘上q,作为第二步: qS=a1q+a1q2++a1qn-1+a1qn. 当q<1时,用上式两边减下式两边,得到 S-qS=a1-a1qn, 公式称为公比小于1的等比级数前n项求和公式.它叙述为:前n项和等于首项与首项乘公比的n次幂的差除以1与公比之差. 例4

浮点数的二进制表示

浮点数的二进制表示 基础知识: 十进制转十六进制; 十六进制转二进制; 了解: 目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算。这种结构是一种科学计数法,用符号、指数和尾数来表示,底数定为2——即把一个浮点数表示为尾数乘以2的指数次方再添上符号。下面是具体的规格: 符号位阶码尾数长度 float 1 8 23 32 double 1 11 52 64 以下通过几个例子讲解浮点数如何转换为二进制数 例一: 已知:double类型38414.4。 求:其对应的二进制表示。 分析:double类型共计64位,折合8字节。由最高到最低位分别是第63、62、61、……、0位: 最高位63位是符号位,1表示该数为负,0表示该数为正; 62-52位,一共11位是指数位; 51-0位,一共52位是尾数位。 步骤:按照IEEE浮点数表示法,下面先把38414.4转换为十六进制数。 把整数部和小数部分开处理:整数部直接化十六进制:960E。小数的处理: 0.4=0.5*0+0.25*1+0.125*1+0.0625*0+…… 实际上这永远算不完!这就是著名的浮点数精度问题。所以直到加上前面的整数部分算够53位就行了。隐藏位技术:最高位的1不写入内存(最终保留下来的还是52位)。 如果你够耐心,手工算到53位那么因该是: 38414.4(10)=1001011000001110.0110101010101010101010101010101010101(2) 科学记数法为:1.0010110000011100110101010101010101010101010101010101,右移了15位,所以指数为15。或者可以如下理解:

《信息理论与编码》,答案,考试重点(1--3章)

《信息理论与编码》习题参考答案 1. 信息是什么信息与消息有什么区别和联系 答:信息是对事物存在和运动过程中的不确定性的描述。信息就是各种消息符号所包含的具有特定意义的抽象内容,而消息是信息这一抽象内容通过语言、文字、图像和数据等的具体表现形式。 2. 语法信息、语义信息和语用信息的定义是什么三者的关系是什么 答:语法信息是最基本最抽象的类型,它只是表现事物的现象而不考虑信息的内涵。语义信息是对客观现象的具体描述,不对现象本身做出优劣判断。语用信息是信息的最高层次。它以语法、语义信息为基础,不仅要考虑状态和状态之间关系以及它们的含义,还要进一步考察这种关系及含义对于信息使用者的效用和价值。三者之间是内涵与外延的关系。 第2章 1. 一个布袋内放100个球,其中80个球是红色的,20个球是白色的,若随机摸取一个球,猜测其颜色,求平均摸取一次所能获得的自信息量 答:依据题意,这一随机事件的概率空间为 120.80.2X x x P ????=???????? 其中: 1 x 表示摸出的球为红球事件, 2 x 表示摸出的球是白球事件。 a)如果摸出的是红球,则获得的信息量是 ()()11log log0.8 I x p x =-=-(比特) b)如果摸出的是白球,则获得的信息量是 ()()22log log0.2 I x p x =-=-(比特) c) 如果每次摸出一个球后又放回袋中,再进行下一次摸取。则如此摸取n 次,红球出现的次数为 () 1np x 次,白球出现的次数为 () 2np x 次。随机摸取n 次后总共所获得信息量为 ()()()() 1122np x I x np x I x + d)则平均随机摸取一次所获得的信息量为 ()()()()()()()()()112211221 log log 0.72 H X np x I x np x I x n p x p x p x p x =+????=-+????=比特/次

十进制与二进制之间互换

十进制与二进制之间互换 (1) 十进制转换为二进制,分为整数部分和小数部分 ① 整数部分 方法:除以2取余数法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数。下面举例: 将十进制的168转换为二进制 得出结果 将十进制的168转换为二进制,(10101000)2 分析:第一步,将168除以2,商84,余数为0。 第二步,将商84除以2,商42余数为0。 第三步,将商42除以2,商21余数为0。 第四步,将商21除以2,商10余数为1。 第五步,将商10除以2,商5余数为0。 第六步,将商5除以2,商2余数为1。 第七步,将商2除以2,商1余数为0。 第八步,将商1除以2,商0余数为1。 第九步,读数,因为最后一位是经过多次除以2才得到的,因此它是最高位,读数字从最后的余数向前读,即10101000 例2、正整数的十进制转换二进制: 要点:除二取余,倒序排列 解释:将一个十进制数除以二,得到的商再除以二,依此类推直到商等于一或零时为止,倒取将除得的余数,即换算为二进制数的结果 例如把52换算成二进制数,计算结果如图: 52除以2得到的余数依次为:0、0、1、0、1、1,倒序排列,所以52对应的二进制数就是110100。 由于计算机内部表示数的字节单位都是定长的,以2的幂次展开,或者8位,或者16位,或者32位....。 于是,一个二进制数用计算机表示时,位数不足2的幂次时,高位上要补足若干个0。本文都以8位为例。那么: (52)10=(00110100)2 二、负整数转换为二进制 要点:取反加一 解释:将该负整数对应的正整数先转换成二进制,然后对其“取补”,再对取补后的结果加1即可 例如要把-52换算成二进制: 1.先取得52的二进制:00110100 2.对所得到的二进制数取反:11001011 3.将取反后的数值加一即可:11001100 即:(-52)10=(11001100)2 三、小数转换为二进制 要点:乘二取整,正序排列 解释:对被转换的小数乘以2,取其整数部分(0或1)作为二进制小数部分,取其小数部分,再乘以2,又取其整数部分作为二进制小数部分,然后取小数部分,再乘以2,直到小数部分为0或者已经去到了足够位数。每次取的整数部分,按先后次序排列,就构成了二进制小数的序列 例如把0.2转换为二进制,转换过程如图: 0.2乘以2,取整后小数部分再乘以2,运算4次后得到的整数部分依次为0、0、1、1,结果又变成了0.2, 若果0.2再乘以2后会循环刚开始的4次运算,所以0.2转换二进制后将是0011的循环,即: (0.2)10=(0.0011 0011 0011 .....)2 循环的书写方法为在循环序列的第一位和最后一位分别下加一个点以示标注

浮点数的表示和基本运算

浮点数的表示和基本运算 1 浮点数的表示 通常,我们可以用下面的格式来表示浮点数 S P M 其中S是符号位,P是阶码,M是尾数 对于IBM-PC而言,单精度浮点数是32位(即4字节)的,双精度浮点数是64位(即8字节)的。两者的S,P,M所占的位数以及表示方法由下表可知 S P M表示公式偏移量 1823(-1)S*2(P-127)*1.M127 11152(-1)S*2(P-1023)*1.M1023 以单精度浮点数为例,可以得到其二进制的表示格式如下 S(第31位)P(30位到 23位) M(22位到 0位) 其中S是符号位,只有0和1,分别表示正负;P是阶码,通常使用移码表示(移码和补码只有符号位相反,其余都一样。对于正数而言,原码,反码和补码都一样;对于负数而言,补码就是其绝对值的原码全部取反,然后加1.) 为了简单起见,本文都只讨论单精度浮点数,双精度浮点数也是用一样的方式存储和表示的。 2 浮点数的表示约定 单精度浮点数和双精度浮点数都是用IEEE754标准定义的,其中有一些特殊约定。 (1) 当P = 0, M = 0时,表示0。 (2) 当P = 255, M = 0时,表示无穷大,用符号位来确定是正无穷大还是负无穷大。

(3) 当P = 255, M != 0时,表示NaN(Not a Number,不是一个数)。 当我们使用.Net Framework的时候,我们通常会用到下面三个常量 Console.WriteLine(float.MaxValue); // 3.402823E+38 Console.WriteLine(float.MinValue); //-3.402823E+38 Console.WriteLine(float.Epsilon); // 1.401298E-45 //如果我们把它们转换成双精度类型,它们的值如下 Console.WriteLine(Convert.ToDouble(float.MaxValue)); // 3.40282346638529E+38 Console.WriteLine(Convert.ToDouble(float.MinValue)); //-3.40282346638529E+38 Console.WriteLine(Convert.ToDouble(float.Epsilon)); // 1.40129846432482E-45 那么这些值是如何求出来的呢? 根据上面的约定,我们可以知道阶码P的最大值是11111110(这个值是254,因为255用于特殊的约定,那么对于可以精确表示的数来说,254就是最大的阶码了)。尾数的最大值是11111111111111111111111。 那么这个最大值就是:0 11111110 11111111111111111111111。 也就是 2(254-127) * (1.11111111111111111111111)2 = 2127 * (1+1-2-23) = 3.40282346638529E+38 从上面的双精度表示可以看出,两者是一致的。最小的数自然就是- 3.40282346638529E+38。 对于最接近于0的数,根据IEEE754的约定,为了扩大对0值附近数据的表示能力,取阶码P = -126,尾数 M = (0.00000000000000000000001)2 。此时该数的二进制表示为:0 00000000 00000000000000000000001 也就是2-126 * 2-23 = 2-149 = 1.40129846432482E-45。这个数字和上面的Epsilon 是一致的。 如果我们要精确表示最接近于0的数字,它应该是 0 00000001 00000000000000000000000 也就是:2-126 * (1+0) = 1.17549435082229E-38。 3 浮点数的精度问题 浮点数以有限的32bit长度来反映无限的实数集合,因此大多数情况下都是一个近似值。同时,对于浮点数的运算还同时伴有误差扩散现象。特定精度下看似

二进制、十进制、位数表示法

子网划分及子网掩码的二进制、十进制、位数表示法 子网划分及子网掩码的二进制、十进制、位数表示法 为了保证所配置的子网地址可以工作,在网络上每台计算机都必须配置自己主机地址中的哪一部分是被用来表示子网地址的。这可以通过在每台计算机上指定一个子网掩码的方式来完成。IPV4中的子网掩码是一个4字节32位比特的值,通过它,接收IP数据包的一方可以从IP地址的主机号部分中区分出子网号地址。TCP/IP中,使用二进制1和0的组合来创建一个32位比特的子网掩码,子网掩码中1的位置表示是网络或子网的地址部分,0表示节点(主机)地址部分。A类、B类、C类地址默认的子网掩码如下: (表一A、B、C三类IP地址及其默认子网掩码对应表) 下面我们来看一下关于子网掩码的划分,由于C类地址的子网划分最为常见,所以我们以C类地址为例,A类和B类的子网掩码划分方法与C类一致。 从表一中可以知道,C类地址只有最后一个字节的8位比特可以定义主机地址,且子网的位数从左往右进行定义,所以,C类子网掩码只能为以下的情况,分别对于二进制、十进制和位数法。 (表二C类地址子网掩码对应表) 注意: 1.在以太网中,全0的地址被定义为网络地址,全1的地址被定义为广播地址,这两种地址在子网划分时应 该不予考虑。

2.另外,早期的RFC规定,不允许使用一个比特进行子网划分,即不支持零子网的情况。但现在RFC的修订 版中已指出可以使用零子网的方法进行子网划分,且网络设备也逐渐开始支持零子网。 表二中的位数法(/25,/28等)是什么意思呢?实际上它的意思是表示有多少位比特被放入了当前的网络以及子网的地址部分中。当十进制子网掩码为255.255.255.128时,其对应的二进制表示形式为 11111111.11111111.11111111.10000000,从二进制的表示中可以看出,掩码中共有25位被置为1,以此来表示网络地址和子网的地址,所以用位数表示法时我们将其写为/25;当掩码为255.255.255.240时,二进制的值对应表示为11111111.11111111.11111111.11110000,其中有28位被置为1,所以用位数表示法表示为/28。 A类和B类地址子网掩码的计算方法同C类地址类似,所以通过上面的方法即可有效地计算出子网掩码的各种表示方法。

十进制小数转换成二进制小数

十进制小数转换成二进制小数 进制转换是人们利用符号来计数的方法,包含很多种数字转换。进制转换由一组数码符号和两个基本因素(“基”与“权”)构成。 目录 一、正数 二、负数 C程序代码:(支持负进制) 一、正数 二、负数 编辑本段 一、正数 在高速发展的现代社会,计算机浩浩荡荡地成为了人们生活中不可缺少的一部分,帮助人们解决通信,联络,互动等各方面的问题。今天我就给大家讲讲与计算机

有关的“进制转换”问题。 我们以(25.625)(十)为例讲解一下进制之间的转化问题。 1. 十 -----> 二 给你一个十进制,比如:6,如果将它转换成二进制数呢? 10进制数转换成二进制数,这是一个连续除2的过程: 把要转换的数,除以2,得到商和余数, 将商继续除以2,直到商为0。最后将所有余数倒序排列,得到数就是转换结果。 听起来有些糊涂?我们结合例子来说明。比如要转换6为二进制数。 “把要转换的数,除以2,得到商和余数”。 那么: 要转换的数是6, 6 ÷ 2,得到商是3,余数是0。 “将商继续除以2,直到商为0……” 现在商是3,还不是0,所以继续除以2。 那就: 3 ÷ 2, 得到商是1,余数是1。 “将商继续除以2,直到商为0……” 现在商是1,还不是0,所以继续除以2。 那就: 1 ÷ 2, 得到商是0,余数是1 “将商继续除以2,直到商为0……最后将所有余数倒序排列” 好极!现在商已经是0。 我们三次计算依次得到余数分别是:0、1、1,将所有余数倒序排列,那就是:110了! 6转换成二进制,结果是110。 把上面的一段改成用表格来表示,则为: 被除数计算过程商余数 6 6/2 3 0 3 3/2 1 1 1 1/ 2 0 1

浮点数在内存中的表示方法

浮点数在内存中的表示方法 浮点数保存的字节格式如下: 地址+0 +1 +2 +3 内容SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM 这里 S 代表符号位,1是负,0是正 E 偏移127的幂,二进制阶码=(EEEEEEEE)-127。 M 24位的尾数保存在23位中,只存储23位,最高位固定为1。此方法用最较少的位数实现了 较高的有效位数,提高了精度。 零是一个特定值,幂是0 尾数也是0。 浮点数-12.5作为一个十六进制数0xC1480000保存在存储区中,这个值如下:地址+0 +1 +2 +3 内容0xC1 0x48 0x00 0x00 浮点数和十六进制等效保存值之间的转换相当简单。下面的例子说明上面的值-12.5如何转换。浮点保存值不是一个直接的格式,要转换为一个浮点数,位必须按上面的浮点数保存格式表 所列的那样分开,例如: 地址+0 +1 +2 +3 格式SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM 二进制11000001 01001000 00000000 00000000 十六进制C1 48 00 00 从这个例子可以得到下面的信息: 符号位是1 表示一个负数 幂是二进制10000010或十进制130,130减去127是3,就是实际的幂。尾数是后面的二进制数10010000000000000000000 在尾数的左边有一个省略的小数点和1,这个1在浮点数的保存中经常省略,加上一个1和小数 点到尾数的开头,得到尾数值如下: 1.10010000000000000000000

接着,根据指数调整尾数.一个负的指数向左移动小数点.一个正的指数向右移动 小数点.因为 指数是3,尾数调整如下: 1100.10000000000000000000 结果是一个二进制浮点数,小数点左边的二进制数代表所处位置的2的幂,例如:1100表示 (1*2^3)+(1*2^2)+(0*2^1)+(0*2^0)=12。 小数点的右边也代表所处位置的2的幂,只是幂是负的。例如:.100...表示 (1*2^(-1))+ (0*2^(-2))+(0*2^(-2))...=0.5。 这些值的和是12.5。因为设置的符号位表示这数是负的,因此十六进制值 0xC1480000表示-12.5。 所有的C/C++编译器都是按照IEEE(国际电子电器工程师协会)制定的IEE E 浮点数表示法来进行运算的。这种结构是一种科学表示法,用符号(正或负)、指数和尾数来表示,底数被确定为2,也就是说是把一个浮点数表示为尾数乘以2的指数次方再加上符号。下面来看一下具体的规格: 符号位指数位小数部分 指数偏移量单精度浮点数 1 位[31] 8位 [30-23] 23位 [22-00] 127 双精度浮点数 1 位[63] 11 位[62-52] 52 位[51-00] 1023 我们以单精度浮点数来说明: 指数是8位,可表达的范围是0到255 而对应的实际的指数是-127到+128 这里特殊说明,-127和+128这两个数据在IEEE当中是保留的用作多种用途的 -127表示的数字是0 128和其他位数组合表示多种意义,最典型的就是NAN状态

各种进制转换方法

一、二进制转十进制 由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为按权相加法。 二、十进制转二进制 十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。 1. 十进制整数转换为二进制整数 十进制整数转换为二进制整数采用除2取余,逆序排列法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。 2.十进制小数转换为二进制小数 十进制小数转换成二进制小数采用乘2取整,顺序排列法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。 然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。 1.二进制与十进制的转换 (1)二进制转十进制 方法:按权展开求和 例: (1011.01)2 =(1×23+0×22+1×21+1×20+0×2-1+1×2-2)10 =(8+0+2+1+0+0.25)10 =(11.25)10 (2)十进制转二进制

十进制整数转二进制数:除以2取余,逆序输出例:(89)10=(1011001)2 2 89 2 44 1 2 22 0 2 11 0 2 5 1 2 2 1 2 1 0 0 1 十进制小数转二进制数:乘以2取整,顺序输出例: (0.625)10= (0.101)2 0.625 X 2 1.25 X 2 0.5 X 2 1.0 2.八进制与二进制的转换 例:将八进制的37.416转换成二进制数: 37 . 4 1 6 011 111 .100 001 110 即:(37.416)8 =(11111.10000111)2

初中七年级信息技术1.3信息与二进制编码教案

初中七年级信息技术1.3信息与二进制编码教案 课时:1课时 课型:新授课 教学方法:讲练法 教学用具:课件、投影、 教学目标: 1、知识目标:实施传统的“讲练”法模式,使学生了解信息编码;安全使用计算机的方法。 2、能力目标:培养学生能对二进制做简单计算。 教学重点:计算机的安全使用;使用计算机的良好首先的培养。 教学难点:二进制的计算。 课前准备: 1、复习计算机系统的结构图;储存容量的基本计算; 2、课件、多媒体教室的试用。 教学过程 一、复习:(5分钟) 师:同学们,通过上节课的学习,我们知道计算机能够正常工作不但需要有硬件部分,还需要软件来支持,否则配置再高的计算机也如同一堆毫无生机的废品。下面请同学思考一下,试着画出计算机系统的结构图。 (可以请同学在黑板上画。) 师:通过大家的演示,再对比一下老师所给的正确结构图。(看大屏演示) (师生共同讨论总结) 计算机系统的组成: 运算器 中央处理器 控制器 主机 随机存储器 内存诸器 只读存诸器 硬件部分 输入设备 外部设备输出设备 计算机系统外存储器 系统软件 软件部分 应用软件

师:问题二,表示存储器存储容量的基本单位,常用的单位之间的换算关系是:1KB= B 1MB= KB 1GB= MB 生:回答。 二、新课导言: 师:大家在日常生活中是否能见到一些只存在两种状态的事或物存在?能否例举出来? 生:例举事物…… 师:能从大家所例举的事物中看出只存在两种状态的事物多存在于电子器件上,这是为什么呢?(由于学生为初一年级的学生,知识含量有限,所以由老师做以下简单的解答)电子器件最易形成两种稳定状态,如电压的高低、电流的通断。所以我们在计算机中采用了以0和1两个数字组成的二进制数的形式来表示计算机中所有的信息。(在大屏幕上展示十进制数的运算法则:逢十进一。启发学生说出二进制的运算法则。) 二、新课: 1、[以课件1展示二进制运算法则,与十进制进行转换运算。] 二进制的重点与难点就是同学们不易改变头脑中的十进制进位方式。 2、[以课件2展示病毒对计算机的危害。] 计算机病毒是指可以在计算机系统中起破坏作用的程序。通过课件的展示,使同学们认识到预防计算机病毒的重要性。同时使同学们在使用计算机的过程中,都应该遵循一定的道德标准,不应该有违反法律和法规的行为。 三、课堂练习: 1、把十进制的5、6、8、9转化为二进制的数。 2、(11)十=()二(15)十=()二 教学后记:

各种进制之间的转换方法

各种进制之间的转换方法 ⑴二进制B转换成八进制Q:以小数点为分界线,整数部分从低位到高位,小数部分从高位到低位,每3位二进制数为一组,不足3位的,小数部分在低位补0,整数部分在高位补0,然后用1位八进制的数字来表示,采用八进制数书写的二进制数,位数减少到原来的1/3。 例:◆二进制数转换成八进制数: = 110 110 . 101 100B ↓↓ ↓ ↓ 6 6 . 5 4 = ◆八进制数转换成二进制数: 3 6 . 2 4Q ↓ ↓ ↓ ↓ 011 110 . 010 100 = ◆ 低位,每4位二进制数为一组,不足4位的,小数部分在低位补0,整数部分在高位补0,然后用1位十六进制的数字来表示,采用十六进制数书写的二进制数,位数可以减少到原来的1/4。 例:◆二进制数转换成十六进制数: .100111B = 1011 0101 1010 . 1001 1100B ↓ ↓ ↓ ↓ ↓ B 5 A . 9 C = 5A ◆十六进制数转换成二进制数: = A B . F EH ↓ ↓ ↓ ↓ 1010 1011. 1111 1110 = .1111111B 先把八进制数Q转换成二进制数B,再转换成十六进制数H。 例:◆八进制数转换成十六进制数: = 111 100 000 010 . 100 101B = .100101B = 1111 0000 0010 . 1001 0100B = F 0 2 . 9 4H = ◆十六进制数转换成八进制数: = 0001 1011 . 1110B = = 011 011 . 111B = 3 3 . 7Q = ⑷二进制数B转换成十进制数D:利用二进制数B按权展开成多项式和的表达式,取基数为2,逐项相加,其和就是相应的十进制数。

浮点数表示方法的分析研究

浮点数表示方法的分析研究.txt13母爱是迷惘时苦口婆心的规劝;母爱是远行时一声殷切的叮咛;母爱是孤苦无助时慈祥的微笑。 浮点数表示方法的分析研究 [日期:2006-06-10] 来源:作者: [字体:大中小] 摘要:在《计算机组成原理》课程的教学中,浮点数的表示与运算是一个重点,也是难点。本文对浮点数的一般表示及标准表示的方法、范围、存储格式等进行了比较深入地比较、分析和研究,力求给读者一个清晰的概述。 关键词:浮点数,表示方法,符号,尾数,阶码,范围 《计算机组成原理》课程是计算机科学与技术专业的一门必修专业基础课,主要是讲述计算机系统几大硬件的组成结构和工作原理。在其核心部件——运算器(Arithmetician)的运算机制中,浮点数(Floating-point)的表示与运算方法是一个重点,也是难点,笔者在查阅了大量中外文文献的基础上,根据多年的教学实践经验,对浮点数的表示方法、规格化处理方法、表示范围进行了比较详细地分析研究,以方便学生的学习,共同行们参考。 1、浮点数的一般表示方法 在数学中,表示一个浮点数需要三要素:尾数(mantissa)、指数(exponent,又称阶码)和基数(base),都用其第一个字母来表示的话,那么任意一个浮点数N可以表示成下列形式:N=M×BE,例如N1=1.234×10-6, N2= -0.001011×2011等,同样的数字对于不同的基数是不相同的,移动小数点的位置,其指数相应地跟着变化。在计算机中,表示一个浮点数,同样需要以上三要素,只是阶码与尾数一同存储,基数常有2、8、16等数值,下面的讨论以2为基数进行。 将浮点数放在计算机中存储时,尾数M用定点(Fixed-point)小数的形式,阶码E用有符号整数形式,改变M中小数点的位置,同时需要修改E的值,可以给出有效数字(significant number)的位数,因此M和E决定了浮点数的精度(precision),E指明小数点在B进制数据中的位置,因而E和B决定了浮点数的表示范围(range),浮点数的符号(Sign)是单独考虑,设阶码有m+1位,尾数有n+1位,则一般浮点数的表示方法如图1所示,其中,下标s代表符号位,下标数字代表数字所处的位数,尾数的小数点默认最高数字位M1之前。图(b)是将尾数的符号位提在最前面,其它部分与图(a)一样,是目前常用的一种表示形式。 图1 浮点数的一般表示形式 在这种表示方法中,阶码的二进制编码(binary code)一般是原码(sign magnitude)、补码(twos complement)或移码(bias),尾数的编码一般是原码或补码。 2、浮点数的规格化处理 在浮点数系统中,小数点的浮动使数值的表示不能惟一,从而给数据处理带来困难,因此有必要使浮点数的表示与存储有一定的标准,考虑到阶码、尾数之间的关系,常将尾数的最高数字位是有效值的数值称为规格化(normalization),由于尾数可以是原码或补码,所以有两种规格化的形式,如表1所示。

十进制数转换成二进制

一、十进制与二进制之间的转换 (1)十进制转换为二进制,分为整数部分和小数部分 ①整数部分 方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数。下面举例: 例:将十进制的168转换为二进制 得出结果将十进制的168转换为二进制,(10101000)2 分析:第一步,将168除以2,商84,余数为0。 第二步,将商84除以2,商42余数为0。 第三步,将商42除以2,商21余数为0。 第四步,将商21除以2,商10余数为1。 第五步,将商10除以2,商5余数为0。 第六步,将商5除以2,商2余数为1。 第七步,将商2除以2,商1余数为0。 第八步,将商1除以2,商0余数为1。 第九步,读数,因为最后一位是经过多次除以2才得到的,因此它是最高位,读数字从最后的余数向前读,即10101000 (2)小数部分 方法:乘2取整法,即将小数部分乘以2,然后取整数部分,剩下的小数部分继续乘以2,然后取整数部分,剩下的小数部分又乘以2,一直取到小数部分 为零为止。如果永远不能为零,就同十进制数的四舍五入一样,按照要求保留多少位小数时,就根据后面一位是0还是1,取舍,如果是零,舍掉,如果是1,向入一位。换句话说就是0舍1入。读数要从前面的整数读到后面的整数,下面举例: 例1:将0.125换算为二进制 得出结果:将0.125换算为二进制(0.001)2 分析:第一步,将0.125乘以2,得0.25,则整数部分为0,小数部分为0.25; 第二步, 将小数部分0.25乘以2,得0.5,则整数部分为0,小数部分为0.5; 第三步, 将小数部分0.5乘以2,得1.0,则整数部分为1,小数部分为0.0; 第四步,读数,从第一位读起,读到最后一位,即为0.001。 例2,将0.45转换为二进制(保留到小数点第四位) 大家从上面步骤可以看出,当第五次做乘法时候,得到的结果是0.4,那么小数部分继续乘以2,得0.8,0.8又乘以2的,到1.6这样一直乘下去,最后不可能得到小数部分为零,因此,这个时候只好学习十进制的方法进行四舍五入了,但是二进制只有0和1两个,于是就出现0舍1入。这个也是计算机在转换中会产生误差,但是由于保留位数很多,精度很高,所以可以忽略不计。 那么,我们可以得出结果将0.45转换为二进制约等于0.0111

浮点数表示方法与运算

在计算机系统的发展过程中,曾经提出过多种方法表达实数,典型的比如定点数。在定点数表达方式中,小数点位置固定,而计算机字长有限,所以定点数无法表达很大和很小的实数。最终,计算机科学发展出了表达范围更大的表达方式——浮点数,浮点数也是对实数的一种近似表达。 1.浮点数表达方式 我们知道任何一个R 进制数N 均可用下面的形式表示:N R =±S ×R ±e 其中,S—尾数,代表N 的有效数字; R—基值,通常取2、8、16;e—阶码,代表N 的小数点的实际位置(相当于数学中的指数)。 比如一个十进制数的浮点表达1.2345×102,其中1.2345为尾数,10为基数,2为阶码。一个二进制数的浮点表达0.001001×25,0.001001为尾数,2为基数,5为阶码;同时0.001001×25也可以表示成0.100100×23,0.100100为尾数,2为基数,3为阶码。浮点数就是利用阶码e 的变化达到浮动小数点的效果,从而灵活地表达更大范围的实数。 2.浮点数的规格化 一个数用浮点表示时,存在两个问题:一是如何尽可能多得保留有效数字;二是如何保证浮点表示的唯一。 对于数0.001001×25,可以表示成0.100100×23、0.00001001×27等等,所以对于同一个数,浮点有多种表示(也就是不能唯一表示)。另外,如果规定尾数的位数为6位,则0.00001001×27会丢掉有效数字,变成0.000010×27。因此在计算机中,浮点数通常采用规格化表示方法。 当浮点数的基数R 为2,即采用二进制数时,规格化尾数的定义为:1/2<=|S|<1。若尾数采用原码(1位符号位+n 位数值)表示,[S]原=S f S 1S 2S 3…S n (S f 为符号位的数符),则满足S 1=1的数称为规格化数。即当尾数的最高有效位S 1=1,[S]原=S f 1S 2S 3…S n ,表示该浮点数为规格化数。对0.001001×25进行规格化后,表示为0.100100×23。 3.浮点数的表示范围 求浮点数的表示范围,实质是求浮点数所能表示的最小负数、最大负数、最小正数和最大正数。

浮点数的二进制表示学习笔记

文章1: 单双精度浮点数的IEEE标准格式 目前大多数高级语言(包括C)都按照IEEE-754标准来规定浮点数的存储格式,IEEE754规定,单精度浮点数用4字节存储,双精度浮点数用8字节存储,分为三个部分:符号位、阶和尾数。阶即指数,尾数即有效小数位数。单精度格式阶占8位,尾数占24位,符号位1位,双精度则为11为阶,53位尾数和1 51 0 细心的人会发现,单双精度各部分所占字节数量比实际存储格式都了一位,的确是这样,事实是,尾数部分包括了一位隐藏位,允许只存储23位就可以表示24位尾数,默认的1位是规格化浮点数的第一位,当规格化一个浮点数时,总是调整它使其值大于等于1而小于2,亦即个位总是为1。例如1100B,对其规格化的结果为1.1乘以2的三次方,但个位1并不存储在23位尾数部分内,这个1是默认位。 阶以移码的形式存储。对于单精度浮点数,偏移量为 127(7FH),而双精度的偏移量为1023(3FFH)。存储浮点数的阶码之前,偏移量要先加到阶码上。前面例子中,阶为2的三次方,在单精度浮点数中,移码后的结果为127+3即130(82H),双精度为 1026(402H)。 浮点数有两个例外。数0.0存储为全零。无限大数的阶码存储为全

1,尾数部分全零。符号位指示正无穷或者负无穷。 motorola 的cpu按big endian顺序排列。 浮点数的二进制表示学习笔记 基础知识: 十进制转十六进制; 十六进制转二进制; IEEE制定的浮点数表示规则; 了解: 目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行 float,double运算。这种结构是一种科学计数法,用符号、指数和尾数来表示,底数定为2——即把一个浮点数表示为尾数乘以2的指数次方再添上符号。下面是具体的规格: 符号位阶码尾数长度 float 1 8 23 32 double 1 11 52 64 以下通过几个例子讲解浮点数如何转换为二进制数

二进制小数

第九讲二进制小数 我们曾经学了二进制以及八,十六及各种进制的整数,以及它们的加减乘除四则运算?大家必然会提问:与十进制分数、小数类似的二进制分数、小数,如何推广过来? 一个二进制分数,就是a是二进制整数,也是二进制整数. b 一个二进制小数,不妨先讲纯小数:O v n v 1, n = O.b i b2b3, b i,,每个b i或为0,或为1.(b i不全为0,也不全为1). 切所在的位称为£分位; b2:》分包 W *分位.(类似于十进制小数0引屯屯…,引为君分位, 匚为壽分位,…)? 二进制小数的运算也和十进制小数运算相类似,差别在于这里是逢二进 十进制小数化为二进制小数,主要通过分数作中间媒介. 例将(0.3)10化为二进制小数.(用(a)k表示k进位数) =(0,010*********L--)a -(o.oiooi)2

0.01001 1010)1100 wcw ~ 醴成循环) 这表示十进制有限小数可能化成二进制循环小数. 本节重点讲二进制循环小数如何化为二进制分数.回忆十进制循环小数化分数,一是要学习推理中的思想方法,二是最好归纳成一个易用易记的公式. 十进制循环小数化分数一般公式: ①纯循环小数;(0釦幻…耳)10匸逗冋…% ②混循坏小数’ (0衍知…葢診】心…気〕 这些公式的推导过程如下,请体会思想方法. 设S二(坤…瓦)心第一歩*在此等式的两边乘1兀右边相当于小数点右移k位,得bs二為W 釘两…和第二歩:两个等式左右两边分别相减,左边为讥7右边为爲三〔巧妙在于差值很整 齐,消去了让人“害怕”的无限长(虽然是循环)的小数): 3(1声.1)=佔…色=沪警二譽.&式①证得. I _ _ ■ k亍 至于混循环,只要借用已证得的公式①,因为 (0.盟弹2…盟診1孔…氐)10 空價?…孔:釘*二鉅) ~w(分子小数点右移龜) 99--900--0 kT介

浮点数表示法-C语言

浮点数表示法 任何数据在内存中都是以二进制(1或着0)顺序存储的,每一个1或着0被称为1位,而在x86CPU上一个字节是8位。比如一个16位(2字节)的short int型变量的值是1156,那么它的二进制表达就是:00000100 10000100。 由于Intel CPU的架构是Little Endian(请参照计算机原理相关知识),所以它是按字节倒序存储的,那么就应该是这样:10000100 00000100,这就是定点数1156在内存中的结构。 对于一个数0x1122 使用Little Endian方式时,低字节存储0x22,高字节存储0x11 而使用Big Endian方式时, 低字节存储0x11, 高字节存储0x22 浮点数是如何存储的呢?目前已知的所有的C/C++编译器都是按照IEEE(国际电子电器工程师协会)制定的IEEE 浮点数表示法来进行运算的。这种结构是一种科学表示法,用符号(正或负)、指数和尾数来表示,底数被确定为2,也就是说是把一个浮点数表示为尾数乘以2的指数次方再加上符号。 下面来看一下具体的float的规格: float:32位,4字节 由最高到最低位分别是第31、30、29、 0 31位是符号位,1表示该数为负,0反之。 30-23位,一共8位是指数位。 22-0位,一共23位是尾数位。 每8位分为一组,分成4组,分别是A组、B组、C组、D组。 每一组是一个字节,在内存中逆序存储,即:DCBA 我们先不考虑逆序存储的问题,所以先按照顺序的来讲,最后再把他们翻过来就行了。 现在让我们按照IEEE浮点数表示法,一步步将float型浮点数123456.0f转换为十六进制代码。 在处理这种不带小数的浮点数时,直接将整数部转化为二进制表示: 1 11100010 01000000也可以这样表示:11110001001000000.0然后将小数点向左移,一 直移到离最高位只有1位,就是最高位的1:1.11100010010000000一共移动了16位,在布耳运算中小数点每向左移一位就等于在以2为底的科学计算法表示中指数+1,所以原数就等于这样:1.11100010010000000 * ( 2 ^ 16 )好了,现在我们要的尾数和指数都出来了。显而易见,最高位永远是1,不能把16说成是0016。 所以这个1也保留,删掉。这样尾数的二进制就变成了:11100010010000000最后在尾数的后面补0,一直到补够23位:11100010010000000000000

相关文档
最新文档