C语言编程float型数据转怎么化为2进制数输出?
先将这个实数的绝对值化为二进制格式
将这个二进制格式实数的小数点左移或右移n位,直到小数点移动到第一个有效数字的右边
从小数点右边第一位开始数出二十三位数字放入第22到第0位
如果实数是正的,则在第31位放入“0”,否则放入“1”
如果n 是左移得到的,说明指数是正的,第30位放入“1”;如果n是右移得到的或n=0,则第30位放入“0”
如果n是左移得到的,则将n减去1后化为二进制,并在左边加“0”补足七位,放入第29到第23位。如果n是右移得到的或n=0,则将n化为二进制后在左边加“0”补足七位,再各位求反,再放入第29到第23位
float和double在存储方式上都是遵从IEEE的规范的,float遵从的是IEEE R32.24
无论是单精度还是双精度在存储中都分为三个部分:
符号位(Sign) : 0代表正,1代表为负
指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储
尾数部分(Mantissa):尾数部分
float的存储方式如下图所示:
在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位。
在这存储实数的四个字节中,将最高地址字节的最高位编号为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位。
先将这个实数的绝对值化为二进制格式
将这个二进制格式实数的小数点左移或右移n位,直到小数点移动到第一个有效数字的右边
从小数点右边第一位开始数出二十三位数字放入第22到第0位
如果实数是正的,则在第31位放入“0”,否则放入“1”
如果n 是左移得到的,说明指数是正的,第30位放入“1”;如果n是右移得到的或n=0,则第30位放入“0”
如果n是左移得到的,则将n减去1后化为二进制,并在左边加“0”补足七位,放入第29到第23位。如果n是右移得到的或n=0,则将n化为二进制后在左边加“0”补足七位,再各位求反,再放入第29到第23位
float在c语言中的意思
浮点型数据类型。C语言中float浮点型数据类型,FLOAT数据类型用于存储单精度浮点数或双精度浮点数。FLOAT数据类型用于存储单精度浮点数或双精度浮点数,浮点数使用IEEE(电气和电子工程师协会)格式。浮点类型的单精度值具有4个字节,包括一个符号位、一个8位excess-127二进制指数和一个23位尾数,尾数表示一...
C语言中float是啥意思
C语言中float是浮点型的,double是长浮点型的.float是32位的,double是64位的.以下是百度百科复制过来的:浮点数(floating point number),占用4byte ,范围:+ 3.4e 38 ~ -3.4e 38(7 个数)(7digits))float在内存中存放数据占用的内存为4字节。
C语言中的float是什么意思?
C语言中float浮点型数据类型,FLOAT数据类型用于存储单精度浮点数或双精度浮点数。浮点数使用 IEEE(电气和电子工程师协会)格式。浮点类型的单精度值具有 4 个字节,包括一个符号位、一个8 位 excess-127 二进制指数和一个 23 位尾数。尾数表示一个介于 1.0 和 2.0 之间的数。由于尾数的高顺序位...
c语言double、 float型数据怎样表示?
1、双精度浮点型数据用%lf输出。因为double是8个字节的,float是4个字节的,%f 的格式就是4个字节的,而 %lf 就是8个字节的。 例如:printf("%lf\\n",x);2、short 占用内存空间2个字节,短整型数据用%d输出 例如:printf("%d\\n",a);例如:include <stdio.h> int main(){double x;sh...
int和float的区别是什么?
int和float是两种不同的数据类型,常用于编程语言中表示数值。 int用于表示整数,没有小数部分,精确度较高。 float用于表示带有小数部分的数值,具有更大的范围,但具有舍入误差。 具体表现为一下区别: 1.区别于整数和浮点数: "int" 是整数类型,用于表示没有小数部分的整数值。例如:-3、0、5等。 "float" 是浮点...
c语言中,为什么要使用float类型的数据?
while(i<=___) 这里填50 i每次自增2,填50刚好循环25次 ..sum+=1\/___ 这里填 (float)i 类型不同会发生隐式转换牺牲精度 ..所以使用z(float)i,把int强制转换成float。int main(){ int i=2;float sum=1.0;while(i<=50){ bai sum+=1\/(float)i;i+=2;} printf("sum=%f\\n"...
C语言中float是什么类型?
C语言中float是:单精度浮点型数据类型。浮点型数据类型,FLOAT 数据类型用于存储单精度浮点数或双精度浮点数。浮点数使用 IEEE(电气和电子工程师协会)格式。浮点类型的单精度值具有 4 个字节,包括一个符号位、一个 8 位 二进制指数和一个 23 位尾数。由于尾数的高顺序位始终为 1,因此它不是以...
float是什么数据类型?
单精度浮点数。FLOAT是C语言的基本数据类型中的一种,表示单精度浮点数。C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。
C语言里 float是什么意思? 具体点 是如何运算的?
float是浮点型 用float定义的数据就是float型即浮点型,直白的说就是精确到小数点后面n位数,一般是8位
c语言中, double、 float、% f、% lf有什么区别
1.双精度浮点型数据用%lf输出。因为double是8个字节的,float是4个字节的,%f 的格式就是4个字节的,而 %lf 就是8个字节的。 例如:printf("%lf\\n",x);2.short 占用内存空间2个字节,短整型数据用%d输出 例如:printf("%d\\n",a);例:include <stdio.h> int main(){double x;short...
林泪绪健: 楼上的几位说得不是很对,当你在声明一个常量的时候例如1.33只要你没有在后面加个f也就是1.33f 那么系统默认的存储方式就是double 如果你要直接把常量赋值给double b=1.33 其实没有结果任何转换 要是声明为1.33f也可以直接用double b=1.33 f double的精度要高于float所以不用强制转换
五河县19244491180: C语言中如何实现将一个浮点数float转成int类型? - ?
林泪绪健: 强制类型转换 比如: float a = 10.5; int b = (int)a; 这样 就转换了,但是不推荐高精度转低精度 会丢失精度的 就像这个,a是10.5 转换后变成10了小了太多
五河县19244491180: C语言中实型数据转化为实数的问题比如一个储存形式为0 01110111 01110100000111010000100的float类型数据,转化为实数的值是多少?大致步骤是怎么... - ?
林泪绪健:[答案] C语言是按IEEE754标准存储的,1位符号位(SIGN)、8位指数位(EXPONENT)、23位尾数位(MANTISSA).16进制转换为10进制的公式如下:SGL = (-1)^SIGN * 1.MANTISSA * 2^(EXPONENT-127)举例:将0x40800000转换为10进制数,方法...
五河县19244491180: c语言里怎么把float转换为char型? - ?
林泪绪健: 如果 x 是 float 型,c 是 char 型,这样就可以把类型转换: c = (char) x; 所谓转换是这样的.例如: float x = 65.1; char c; c = (char) x; 这样 c 里存的就是 65,即字符 'A'. 补充回答: 还有另外一种“转换”,就是 Arvin 2010-11-06 14:08 所说的...
五河县19244491180: C语言 数组类型转换,怎样将一个float类型的数组转换成字符(串)数组? - ?
林泪绪健: 1:小端存储 float 转成HEX字符串 float y=0.1111111119389534f; char a[9]; unsigned char *p; p=(unsigned char *)(&y); sprintf(a,"%02X%02X%02X%02X",p[0],p[1],p[2],p[3]); 2:HEX字符串转float char a[9]="398EE33D"; float y; unsigned char ...
五河县19244491180: C语言 数组类型转换,怎样将一个float类型的数组转换成字符(串)数组??
林泪绪健: char char_[7]=(char *)V的.float value[8],a=0; char value0_char[2],value1_char[10],value2_char[10],value3_char[10]…… sprintf(value0_char, "%-3f",value[0]); //"-"负号表示左对齐,3 sprintf(value1_char, "%-10f",value[1]); //"-"负号表示左对齐,10:占10个空
五河县19244491180: 在C语言里,怎么把floa数据类型,转换成unsigned char数据类型? - ?
林泪绪健: 你这种操作要进行指针强制转换才能进行,执行结果也是可以琢磨出来的;但即便是进行了操作也可能达不到你的目的……因为float型数在计算机中是用尾数和阶码方式表示的,阶码用移码表示,尾数用原码表示,且尾数被变成了大于1而小于1的数;而unsigned char型数是用被码表示的;虽然它们都用4个字节表示,但表示方法差异很大.所以你不如说说要想达到什么目的,看看能为你想个什么办法……
五河县19244491180: C语言中,如果其中一个操作数为float型,那么运算时是将另一个操作数转换为float型,还是... - ?
林泪绪健: 对于同种类型数据 不需要进行转换 对于不同种数据类型 对于一个是整型和一个是浮点类型的 要将整型转换成浮点类型 如 float 和其他整型数据 系统会将整型转化成float 对于两个都是float的数据 不会进行转化成double类型 若是float和double类型的 系统会将float转换成double
五河县19244491180: 请问C语言中如何将int转换为float - ?
林泪绪健: 把inta;转换为float类型有两种办法:1、手动强制转换:floatb=(float)a;//强制转换2、自动转换,基本上所有语言都是会在混合运算时自动强转为统一数据类型,统一为最高精度的,所以a*1.0或a/1.0就可以:floatb=a*1.0;//自动转换
五河县19244491180: C语言的浮点型怎么转换为整型? - ?
林泪绪健: C语言有以下几种取整方法:1、直接赋值给整数变量.如:int i = 2.5; 或 i = (int) 2.5;这种方法采用的是团森舍去小数部分,能用于你的问题.2、C/C++中的整数除法运算符“/”本身就有取整功能(int / int),而下面介绍的取整函数返回...