十进制小数转十六进制(浮点型转16进制)C语言代码+2种方法
十进制小数转十六进制(浮点型转16进制)C语言代码+2种方法!
·
十六进制简介
十六进制(简写为hex或下标16),在数学中是一种逢16进1的进位制。通常用0-9,a-f(或A-F)表示16个基数,即0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F表示0-15。如:十六进制数1F,F是个位数表示15,1是十位数表示1个16,那么它转换为十进制数即为31,16+15=31。16进制数是计算机中常用的进数制,比如颜色代码#FFFFFF、Unicode码U+200D等都可用16进制数表示。
十进制转十六进制原理
十进制小数转十六进制小数,整数部分方法为除十六取余再倒序,小数部分方法为乘十六取整,每次乘以相应之后基数后取结果的整数部分即可。需要注意的是并非所有的十进制小数都能完全转化为十六进制小数,这时就需要取近似值。
以1234.567为例:
拓展:十进制小数转换为其他进制小数
十进制小数转换为其他进制的方法与转换为十六进制的方法相同,十进制小数转R进制小数,整数部分方法为除R取余再倒序,小数部分方法为乘R取整,每次乘以相应之后基数后取结果的整数部分即可。需要注意的是并非所有的十进制小数都能完全转化为R进制小数,这时就需要取近似值。
C语言代码实例
方法一:
#include <stdio.h>
#include <string.h>
void main()
{
char integer[32]="0";
char decimal[32]="0";
char HEX[] = "0123456789ABCDEF";
char hex[64];
char hex_temp;
int i,j,k = 0;
double num, decimal_temp ,integer_temp = 0;
printf("输入一个小数:");
scanf("%lf", &num);
integer_temp = num;
while (integer_temp)
{
integer[i++] = HEX[(int)integer_temp % 16]; //对十进制数求余并最终与HEX[]数组中的字符匹配
integer_temp = (int)integer_temp / 16;
}
integer[i]='.';
for(j = i - 1; j-k > 0; j--)//调换整数的16进制顺序
{
hex_temp = integer[j];
integer[j] = integer[k++];
integer[i-j-1] = hex_temp;
}
decimal_temp = num-(int)num;
for(i = 0; i < 6;i++)//保留6位有效数字
{
decimal_temp = decimal_temp * 16;
decimal[i] = HEX[(int)decimal_temp];
decimal_temp = decimal_temp -(int)decimal_temp;
if(decimal_temp == 0)
{
decimal[i+1]='\0';
break;
}
}
strcpy(hex,integer);
strcat(hex,decimal);
puts(hex);
}
验证:在线进制转换工具
方法二:
#include <stdio.h>
#include <math.h>
#include <string.h>
int main()
{
char out[20]="0";
char out1[20]="0";
double temp;
double data;
int integer=0,i=0;
double decimal=0;
printf("输入一个小数:");
scanf("%lf",&data);
integer = (int)data;
decimal = data - integer;
for(i = 0; i < 10;i++)
{
decimal = decimal*16;
sprintf(out1+i,"%X",(int)decimal);
temp = decimal -(int)decimal;
decimal=temp;
if(temp == 0)
{
out1[i+1]='\0';
break;
}
}
sprintf(out,"%X.",integer);
strcat(out,out1);
printf("out=%s\n",out);
return 0;
}
验证:在线进制转换工具
IEEE 754标准格式方式存储的浮点转HEX:
符点数(小数)转十六进制C语言代码实例+原理解释(强制类型转换+联合体转换)_xiaohai@Linux的博客-CSDN博客
更多推荐
已为社区贡献2条内容
所有评论(0)