c语言、浮点数怎么变成16进制

作者&投稿:充贤 (若有异议请与网页底部的电邮联系)
C语言中,单精度浮点数十进制时是22.84,转化为16进制是多少,怎么转化的~

整数部分用16除,反向取余数;小数部分用16乘,正向取整数。具体如下:
22÷16 = 1 余 6
1÷16 = 0 余 1
所以整数部分是16。小数部分
0.84x16 = 13(D) . 44
0.44x16 = 7 .04
0.04x16 = 0 .64
0.64x16 = 10(A) .24
0.24x16 = 3 .84
0.84x16 = 13(D) . 44
...以后循环了,所以
22.84(10) = 16.D70A3D70A3...(16)
还可以先“用2除反向取余数”和“用2乘正向取整数”变成二进制,再从小数点开始左右每4位分开,前后不足4位的用0补齐,然后用对应的16进制符号直接写出来就可以了。22.84化成二进制是10110.11010111000010100011...→1'0110.1101'0111'0000'1010'0011→0001'0110.1101'0111'0000'1010'0011→16.D70A3...
要写代码,如下便可:
#include "stdio.h"int main(void){ double x=22.84,t; char h[17]="0123456789ABCDEF", i,k; printf("%g(10) = %x.",x,int(x)); for(t=x-int(x),i=0;i<10;i++){ k=int(t*=16),t-=k; printf("%c",h[k]); } printf("...(16)
"); return 0;} C/C++没有提供以指针形式输出16进制数据的功能。

由于对于0x40a80000这类16进制写法,编译器都会默认其为整数,所以不能这样去做。故而无法实现你的设想。如果你非要以十六进制形式赋值浮点数,那么只能通过其他途径了。
比如说这样写:
char cc[4] = {0x00,0x00,0xa8,0x40}; // 因为window为小端模式所以低字节存放在低地址,高字节存放在高地址 float f=0.0f; memcpy(&f,cc,4); printf("%f",f);

  数据类型的作用是说明数据和操作的意义,换句话说给定一块内存,可以说它是int类型,也可以说它是float类型。


  同时C语言中输出十六进制数,必须是整型数,因此,可以使用union联合体来输出浮点数的16进制。示例代码如下:

#include <stdio.h>
union fi
{
float f;
int i;
} ufi;
int main()
{
ufi.f = 1.1f;
printf("%x
", ufi.i );
}

  



需要准备的材料分别有:电脑、C语言编译器。

1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。

2、在test.cpp文件中,输入C语言代码:printf("%x", 1515);。

3、编译器运行test.cpp文件,此时成功通过%x输出了十六进制的格式。



首先 浮点数2.5写成二进制应该为10.1(其中整数部分10b=2d, 小数部分0.1*2=1所以0.1b为0.5d)。
然后要把10.1规格化(写成1.xxxx * 2^n的形式,有点像科学计数法)得到1.01*2^1(其中2^1中的1为阶码, 1.01为有效数字)
加上2.5为正数,这就得到三部分信息:
1. 有效数字为1.01.
2. 阶码为1.
3. 符点数为正数

而c/c++的float类型结构为:
1. 最低的23位记录规格化小数中的有效数字(但是不保存最前面的1)
2. 之后的8位记录阶码(上面的阶码转换到这里要+127)
3. 最高的一位表示正负数(0为正数,1为负数)

最终得到的二进制数为:
高位 低位
0 10000000 01000000000000000000000
整理得:
0100 0000 0010 0000 0000 0000 0000 0000
转到16进制得:
40200000

注意:0 无穷大 在符点数里比较特殊另外处理(我也不太明白-_-!)

#include <stdio.h>
float Hex_To_Decimal(unsigned char *Byte,int num)//十六进制到浮点数
{
// char cByte[4];//方法一
// for (int i=0;i<num;i++)
// {
// cByte[i] = Byte[i];
// }
//
// float pfValue=*(float*)&cByte;
//return pfValue;

return *((float*)Byte);//方法二

}
long FloatTohex(float HEX)//浮点数到十六进制转换1
{
return *( long *)&HEX;
}

void FloatToByte(float floatNum,unsigned char* byteArry)////浮点数到十六进制转换2
{
char* pchar=(char*)&floatNum;
for(int i=0;i<sizeof(float);i++)
{
*byteArry=*pchar;
pchar++;
byteArry++;

}
}

void main()
{
unsigned char floatToHex[4];
unsigned char hexbyte[4]={0xcd,0xCC,0xCC,0x3D};//传输数据为3d cc cc cd
float Hdecimal=0.0;
float flh=0.4;
// int num=sizeof(hexbyte);
// printf("num= %d\n",num);
Hdecimal=Hex_To_Decimal(hexbyte,sizeof(hexbyte));//十六进制转换为浮点数
printf("\n 浮点数为:\n %f\n",Hdecimal);

2.5的十六进制格式不是0x40200000,而是:
整数部分:
0x2
小数部分:
0.5*16=8=0x8
结合起来:
0x2.8


C语言中float怎么转换为数字?
在C语言中,将一个浮点数变换成整数的示例:main(){ float f=5.75;printf("f=%d,f=%f\\n",(int)f,f);} 执行程序,输出结果为f=5,f=5.750000。 f=5即为由浮点数转化出的整数。上述示例中f虽强制转为int型,但只在运算中起作用, 是临时的,而f本身的类型并不改变。因此,(int)f的...

C语言中什么是浮点数转换?
用浮点常数给float类型变量赋值,如:float f=0.1 ; 正确写法为:float f=0.1f ;调用返回值类型为double的函数,给float类型变量赋值,如:float f=pow(x,n); pow返回参数x的n次幂。 正确写法:float f=powf(x,n); \/\/调用正确的函数 因此,数据间赋值一定要采用正确的类型,建议在使用浮...

c语言中浮点数怎样转换为整型?
C语言中,浮点型转换为整型可以用:强制类型转换、自动类型转换,例如:(int)3.14、int a = 3.14。1、强制类型转换 强制类型转换是通过类型转换运算来实现的。其一般形式为:(类型说明符)(表达式),其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。例如: (double) a 把a转换为双...

c语言、浮点数怎么变成16进制
同时C语言中输出十六进制数,必须是整型数,因此,可以使用union联合体来输出浮点数的16进制。示例代码如下:include <stdio.h>union fi{float f;int i;} ufi;int main(){ufi.f = 1.1f;printf("%x\\n", ufi.i );}

c语言如何用浮点数
include<stdio.h> int main(){ float a=3.123000;printf("%g\\n",a);\/\/自动省略后面无意义的0 return 0;}

C语言中对于浮点数进行(int)转换时,计算机是按照四舍五入呢?还是只取...
是只取整数部分的。也就是,可能是1.999999999 然后转换为int就是1,所以 浮点数向int转换,会丢失精度。为了避免这个,建议如果想取到整数部分。可以使用 float b;int a;a=(b+0.5);这样写的话,就是四舍五入。如果 写成 a=b.可能有 0.99999999999 被截断,a就是0的情况。

c语言 单精度浮点数是怎样转换成2进制数
(1)将第22位到第0位的二进制数写出来,在最左边补一位“1”,得到二十四位有效数字。将小数点点在最左边那个“1”的右边。(2)取出第29到第23位所表示的值n。当30位是“0”时将n各位求反。当30位是“1”时将n增1。(3)将小数点左移n位(当30位是“0”时)或右移n位(当30位是...

浮点数是怎么表示的呢?
完整的浮点数表示包括以下几点:符号(S):1位二进制位,0表示正数,1表示负数。阶码部分(E):根据不同的精度E的位数不同(参照下图float与double的区别),表示小数点向右移动的位数。E>0 表示向右移动,E<0表示向左移动。尾数部分(M):根据不同的精度M的位数不同参照下图float与double的区别)...

C 语言 怎么从浮点数改成整形
一个办法是不输出f后面的小数部分 printf("%.0f',s)f输出默认输出6位小数部分,自定义输出小数的位数的方式是%x.yf x是整数部分的位数,不足的话前面空格,y是小数部分的位数,xy都是正整数,中间用点隔开 还有一种就是强制转换,转换成int型 printf("%d",(int)s);...

c语言 不匹配的浮点数转换
输出格式要同变量类型匹配。不匹配,输出的结果就会错。float double 可以用 %e 格式,整型不可以。整型可以用%d %ld 格式, float double 不可以。除非用强制转换:printf("%e %e %e %e \\n", n1, n2,(double) n3,(double) n4);printf("%ld %ld %ld %ld",(long)n1,(long)n2,n3,n4);由于...

色达县15647904885: c语言中如何将10进制的浮点数转化为16进制数 -
邴费硫辛: 一、double的64位表达为:负号63,幂的负号62,2的幂61-52,精度表达51-0;double转为64位步骤: 1、正为0,负为1,放在63位; 2、将数据表达成1.XXX*(2^I)形式,I为整数; 3、若I有负号,62位为1,否则为0; 4、I的绝对值有61-52位表达; 5、1.XXX去掉1成0.XXX;将Y=0.XXX表达为二进制;具体算法可以参考:for(int i=51;i>=0;i--){Y*=2;if(Y>=1){Y-=1;Result[i]=1;}else Result[i]=0;}Result[i]就是51-0位的数值; 6、将64位二进制表达成16进制;

色达县15647904885: C语言,将浮点数输出为十六进制为什么输出是0,如何改 -
邴费硫辛: 浮点数以%x格式输出会出现异常,需要强制进行类型转换, 将printf("your is %x",a);改为: printf("your is %x",(int)a);

色达县15647904885: c语言中如何将10进制的浮点数转化为16进制存放到char型数组中? -
邴费硫辛: 本人在串口通信中就用到这个,讲浮点数(不谈进制)转化为字符型(楼主所谓的16进制)放入char字符数组.更精确的说应该是将浮点数,以字节形式放入字节数组(不是char数组哦,因为char是有符号的),用以后续的通信传输(大多数的...

色达县15647904885: 一个很简单的问题,C语言浮点乘以1000然后转换16进制 -
邴费硫辛: #include <stdio.h>#include <math.h> int main() { float A[7]={1.123,1.234,2.345,3.001,4.043,5.231,1.000}; int i, tmp; char C[7][12]; for (i=0; i<7; i++) { tmp = (int)(A[i]*1000+0.5); //转换成整型值 sprintf(C[i], "0x%08x", tmp);//转换成16进制字符串 printf("%s\n", C[i]); } return 0; }

色达县15647904885: 单片机c语言中,怎么快速把二进制数转成十六进制数 -
邴费硫辛: 直接用查表对应的方式可以实现快速转换. 1、一位数十六进制与二进制对应表 十六进制 二进制 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 A 1010 B 1011 C 1100 D 1101 E 1110 F 1111 2、转换方法:二进制以小数点为分隔,往前往后每四位划为一组,不足四位补0,按上表用对应的十六进制数字代入即可.

色达县15647904885: c语言程序设计 输入一个数 要求将其转换为十六进制输出 -
邴费硫辛: #include <stdio.h> char f(int n) { return "0123456789ABCDEF"[n]; } int main() { int n,i=0; char hex[20]=""; scanf("%d",&n); while(n) { hex[i++]=f(n%16); n/=16; } for(i--;i>=0;i--) printf("%c",hex[i]); return 0; }

色达县15647904885: 浮点数怎么转换成十六进制 -
邴费硫辛: 如果你想输出内存情况,按16进制数值,按字节依次输出.你可以用 union. 下面例子,输出 float 和 double. #include<stdio.h> union uuf { float f; char s[4]; } uf; union uud { double d; char s[8];} ud; int main() { int i; uf.f = 12.345; for (i=3;i>=0;i--)...

色达县15647904885: 怎样用C语言编写一个程序将输入的十进制数转化成16进制? -
邴费硫辛: 你可以设置一个字符串数组 char HEX[16] = {'0', '1', '2', 3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'} 以后你得出的数字,比如余数y是10,那么HEX[y]打印出来就是A了 例子(现写的) int now; int res[100];//答案 int c = 0;//位数 输入到now; while ...

色达县15647904885: c语言如何以输出16进制字符到文件 -
邴费硫辛: 1、首先,定义一个字符串变量char和asc,保存转换的字符和转换后的16进制数.2、定义一个整型变量n,保存字符的ASCII码.3、给字符char赋值,其值为字符i.4、将字符char转换为ASCII码,并保存在n中.5、字符的ASCII码,进一步转换为16进制数,并保存在变量asc中.6、最后,输出字符转换为16进制数后的数值.7、运行程序,代码中的字符i,已成功转换为16进制数.

色达县15647904885: 请问C语言中的数值0210怎么转化成十六进制的数?求步骤!谢谢! -
邴费硫辛: 0210因为是0开头,所以认为它是8进制,先转换为2进制: 10 001 000(每位8进制,对应3位2进制) 转为16进制: 1000 1000所以结果是88(每四位二进制,对应1位十六进制)

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网