浮点数转换为二进制,小数部分怎么转换?
在C++里,实数(float)是用四个字节即三十二位二进制位来存储的。其中有1位符号位,8位指数位和23位有效数字位。实际上有效数字位是24位,因为第一位有效数字总是“1”,不必存储。 有效数字位是一个二进制纯小数。8位指数位中第一位是符号位,这符号位和一般的符号位不同,它用“1”代表正,用”0“代表负。整个实数的符号位用“1”代表负,“0”代表正。
在这存储实数的四个字节中,将最高地址字节的最高位编号为31,最低地址字节的最低位编号为0,则实数各个部分在这32个二进制位中的分布是这样的:31位是实数符号位,30位是指数符号位,29---23是指数位,22---0位是有效数字位。注意第一位有效数字是不出现在内存中的,它总是“1”。
将一个实数转化为C++实数存储格式的步骤为:
(1)先将这个实数的绝对值化为二进制格式,注意实数的整数部分和小数部分化为二进制的方法是不同的。
(2)将这个二进制格式实数的小数点左移或右移n位,直到小数点移动到第一个有效数字的右边。
(3)从小数点右边第一位开始数出二十三位数字放入第22到第0位。
(4)如果实数是正的,则在第31位放入“0”,否则放入“1”。
(5)如果n 是左移得到的,说明指数是正的,第30位放入“1”。如果n是右移得到的或n=0,则第30位放入“0”。
(6)如果n是左移得到的,则将n减去一然后化为二进制,并在左边加“0”补足七位,放入第29到第23位。如果n是右移得到的或n=0,则将n化为二进制后在左边加“0”补足七位,再各位求反,再放入第29到第23位。
将一个计算机里存储的实数格式转化为通常的十进制的格式的方法如下:
(1)将第22位到第0位的二进制数写出来,在最左边补一位“1”,得到二十四位有效数字。将小数点点在最左边那个“1”的右边。
(2)取出第29到第23位所表示的值n。当30位是“0”时将n各位求反。当30位是“1”时将n增1。
(3)将小数点左移n位(当30位是“0”时)或右移n位(当30位是“1”时),得到一个二进制表示的实数。
(4)将这个二进制实数化为十进制,并根据第31位是“0”还是“1”加上正号或负号即可。
特别地,实数0用C++的float格式表示是00000000000000000000000000000000。
如果还不太明白,这里举几个例子。
一。将23.56化为C++的float格式。
(1)将23.56化为二进制后大约是“10111.1000111101011100001”。
**** 首先将一个小数如:235.725的小数部分取出,即:0.725,将其乘以进制数二进制就乘以2后得到1。45,取其整数部分1为二进制小数的第一项(十分位),在将小数部分0。45乘2得0。9,取其整数部分为二进制小数的第二位(百分位)0,在将其小数部分0。9乘2,得1。8,取其整数部分为二进制小数的第三位(千分位)1,取其小数部分0。8再乘2……以此类推,直到值为0或形成循环小数则停止。
(2)将小数点左移四位,得到“1.01111000111101011100001”。
(3)这已经有了二十四位有效数字,将最左边一位“1”去掉,得到“01111000111101011100001”。将它放入第22到第0位。
(4)因为23.56是正数,因此在第31位放入“0”。
(5)由于我们把小数点左移,因此在第30位放入“1”。
(6)因为我们是把小数点左移4位,因此将4减去1得3,化为二进制,并补足七位得到0000011,放入第29到第23位。
完毕。
如果把最左边定为第31位,最右边定为第0位,那么在C++里,float格式的23.56是这样表示的:01000001101111000111101011100001。相应地-23.56就是这样表示的:11000001101111000111101011100001。
二。将实数0.2356化为C++的float格式。
(1)将0.2356化为二进制后大约是0.00111100010100000100100000。
(2)将小数点右移三位得到1.11100010100000100100000。
(3)从小数点右边数出二十三位有效数字,即11100010100000100100000放入第22到第0位。
(4)由于0.2356是正的,所以在第31位放入“0”。
(5)由于我们把小数点右移了,所以在第30位放入“0”。
(6)因为小数点被右移了3位,所以将3化为二进制,在左边补“0”补足七位,得到0000011,各位取反,得到1111100,放入第29到第23位。
完毕。因此0.2356用C++的float格式表示是:00111110011100010100000100100000。其中最左边一位是第31位,最右边一位是第0位。
三。将实数1.0化为C++的float格式。
(1)将1.0化为二进制后是1.00000000000000000000000。
(2)这时不用移动小数点了,这就是我们在转化方法里说的n=0的情况。
(3)将小数点右边的二十三位有效数字00000000000000000000000放入第22到第0位。
(4)因为1.0是正的,所以在第31位里放入“0”。
(5)因为n=0,所以在第30位里放入“0”。
(6)因为n=0,所以将0补足七位得到0000000,各位求反得到1111111,放入第29到第23位。
完毕。所以实数1.0用C++的float格式表示是:00111111100000000000000000000000。其中最左边一位是第31位,最右边一位是第0位。
选定小数位数为16位,则乘以65536(2^16)实现整数化:
(1234.3945)10*(2^16)10=(1234.3945)10*(65536)10=(80897277.952)10
>(80897277)10 //去掉小数,保留整数部分
=(4D264FD)16=(0100 1101 0010 0110 0100 1111 1101)2因为最初乘了65536,即2的16次方,所以换算成二进制时应右移十六位,去掉前导零,即(10011010010.0110010011111101)2
(1112.999)10*(2^16)10
=(1112.999)10*(65536)10
=(72941502.464)10
>(72941502)10 //去掉小数,保留整数部分
=(458FFBE)16
=(0100 0101 1000 1111 1111 1011 1110)2
因为最初乘了65536,即2的16次方,所以换算成二进制时应右移十六位,去掉前导及后导零,
即(10001011000.111111111011111)2
乘2取整法,即每一步将十进制小数部分乘以2,所得积的小数点左边的数字(0或1)作为二进制表示法中的数字,直到满足你的精确度为止。
简述计算机硬件定义
由于电路的复杂性因素,电脑中都使用二进制数,只有0和1两个数码,逢二进一,最容易用电路来表达,比如0代表电路不通,1代表电路通畅。我们平时用电脑时感觉不到它是在用二进制计算是因为电脑会把你输入的信息自动转换成二进制,算出的二进制数再转换成你能看到的信息显示到屏幕上。在存储器中含有大量...
码率和分辨率的区别
1、码率的简介:码率也叫比特率,是指每秒传送的比特数。比特率越高,传送数据速度越快。声音中的比特率是指将模拟声音信号转换成数字声音信号后,单位时间内的二进制数据量,是间接衡量音频质量的一个指标。 视频中的码率原理与声音中的相同,都是指由模拟信号转换为数字信号后,单位时间内的二进制数据...
数字信号可以远距离传播么?
像我们平时采集到的如眼睛,摄像头等是模拟信号,特点是信号连续,而数字信号是用于计算机处理的,用高低电平即0和1来表示。电话是模拟,微波和光线既可是数字又可模拟。数字信号当然能远距离传播,如用光线,无线通信皆可。
图像数字化的过程包括那几个步骤??
包括3个步骤:采样、量化、压缩编码 1、采样:采样的实质就是要用多少点来描述一幅图像,采样结果质量的高低就是用前面所说的图像分辨率来衡量。简单来讲,对二维空间上连续的图像在水平和垂直方向上等间距地分割成矩形网状结构,所形成的微小方格称为像素点。一副图像就被采样成有限个像素点构成的集合...
计算机内数的表示与编码
1、一个十进数的BCD码如何转换成十进制数? 2、一个十进制数的BCD码是该数的 二进制数吗? 3、一个十进制数的BCD码与二进制数之间如何相互转换? 2、ASCII码ASCII码是计算机系统中使用得最广泛的一种编码(读作阿斯克伊码)。ASCII码虽然是美国国家标准,但它已被国际标准化组织(ISO)认定为国际标准。ASCII码已...
windows 永久路由 跃点数 默认值是多少
一、路由值:1、metricMetric为路由指定所需跃点数的整数值(范围是1~9999)2、主路由(网掩码为 255.255.255.255 的路由)3、环回网络路由(目标为 127.0.0.0,网掩码为 255.255.255.0 的路由)4、多播路由(目标为 224.0.0.0,网掩码为 240.0.0.0 的路由)二、跃点 :1、即路由。
音频文件的采样率和位速分别表示什么
kbps 比特率 表示经过编码(压缩)后的音频数据每秒钟需要用多少个比特来表示,而比特就是二进制里面最少的单位,要么是0,要么是1。比特率与音频压缩的关系简单的说就是比特率越高音质就越好,但编码后的文件就越大;如果比特率越少则情况相反。 比特率是指将数字声音由模拟格式转化成数字格式的采样...
自动化中plc是控制系统吗
这里的A\/D中的A,多为电流,或电压,也有温度。D\/A中的A,多为电压,或电流。电压、电流变化范围多为0~5V,0~10V,4~20mA,有的还可处理正负值的。这里的D,小型机多为8位二进制数,中、大型多为12位二进制数。A\/D、D\/A有单路,也有多路。多路占的输入输出继电器多。有了A\/D、D\/A...
WINDOWS 2000 SEVER 命令行中有哪些命令
入文件中将换行符转换为回车\/换行符。该模式为默认的传输模式。 -b 指定二进制图像传输模式。没有执行回车\/换行符转换。 -h 传输 Windows 2000 计算机上标记为隐藏属性的源文件。如果没有该选项,在 rcp 命令行上指定隐藏文件的效果与文件不存在一样。 -r 将源的所有子目录内容递归复制到目标。source 和 ...
QQ音乐绿钻高品质音乐和普通的有什么区别?
比特率在600K-1200k,甚至更高,文件大小基本都在30MB以上 。声音中的比特率是指将模拟声音信号转换成数字声音信号后,单位时间内的二进制数据量,是间接衡量音频质量的一个指标。 视频中的比特率(码率)原理与声音中的相同,都是指由模拟信号转换为数字信号后,单位时间内的二进制数据量。
陈丁得必: 十进制的整数部分转换为二进制整数采用"除2取余,逆序排列"法.具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位...
宁海县19774691745: 浮点的十进制数字,如何转换成二进制? - ?
陈丁得必: 十进制数的小数点部分转二进制用的是“乘2取整正排序”的方法:如下: 0.712*2=1.424 取整 1 0.424*2=0.848 取整0 0.848*2=1.696 1 0.696*2=1.392 1 0.392*2=0.748 0 0.748*2=1.568 1 0.568*2=1.136 1 0.136*2=0.272 0 如果这样下去出现了循环的现象,那么就在循环前处结束; 如果一直没有循环,那么就取你想要的位数就可以了 这样得到了对应小数点后二进制为:0110110...
宁海县19774691745: 浮点数的二进制表示 - ?
陈丁得必: 整数怎样转2进制,小数怎样转2进制就不说了. 12.5: 1. 整数部分12,二进制为1100; 小数部分0.5, 二进制是.1,先把他们连起来,从第一个1数起取24位(后面补0): 1100.10000000000000000000 这部分是有效数字.(把小数点前后两部...
宁海县19774691745: 如何转换浮点数的二进制格式为十进制 - ?
陈丁得必: 二进制的小数转换为十进制主要是乘以2的负次方,从小数点后开始,依次乘以2的负一次方,2的负二次方,2的负三次方等. 例如:二进制数0.001转换为十进制. 第一位为0,则0*1/2,即0乘以2负一次方. 第二位为0,则0*1/4,即0乘以...
宁海县19774691745: 怎么把数组 32位浮点型 转换为8位整形再转换回来 - ?
陈丁得必: 这个问题你需要理解32位浮点数和整形数的二进制存储,32位浮点的二进制存储是1位符号为,8为指数位,23为尾数位,如何将一个浮点数转换成二进制呢比如12.5首先整数部分12的二进制计算用12/2的余数转换得到二进制1100,而小数部分...
宁海县19774691745: 二进制中浮点数怎么表示 - ?
陈丁得必: 目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算.这种结构是一种科学计数法,用符号、指数和尾数来表示,底数定为2——即把一个浮点数表示为尾数乘以2的指数次方再添上符号.下面是具体的规格:符号位 阶...
宁海县19774691745: 从十进制数转化为二进制数时小数部分应该怎么算? - ?
陈丁得必: 给你举个例子吧,例如0.125D0.125X2=0.25,整数部分为00.25X2=0.5,整数部分为00.5X2=1.0,整数部分为1,所以0.125化为二进制就 是0.001B积的小数部分依次乘以2,直到所得的积小数部分为0为止有些数无法达到0,就按要求保留例如0...
宁海县19774691745: 关于计算机数值转换的问题 - ?
陈丁得必: 将数(20.59375)10转化为754标准的32位浮点数的二进制存储格式. 解:首先分别将整数部分和小数部分转换成二进制 (20.59375)10=+(10100.10011)2 然后移动小数点使其在1,2位之间 10100.10011=1.010010011*2^4 e=4 于是得到:S=0,E=e+127=131,M=010010011 最后得到32位浮点数的二进制存储格式为 0 100,0001,1 010,0100,1100,0000,0000,0000 =(41A4C000)16
宁海县19774691745: 请问浮点型数据在计算机是怎么存储的 - ?
陈丁得必: 计算机用二进制来表示数字,浮点数也是如此: 首先了解如何用二进制表示小数(也就是如何把十进制小数转化为二进制表示): 举一个简单例子,十进制小数 10.625 1)首先转换整数部分:10 = 1010b 2)小数部分0.625 = 0.101b (用“乘2...