十进制小数转十六进制(浮点型转16进制)C语言代码+2种方法

十进制小数转十六进制(浮点型转16进制)C语言代码+2种方法,第1张

十进制小数转十六进制(浮点型转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 
#include 

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]='';
			break;
		}
    }
	strcpy(hex,integer);
	strcat(hex,decimal);
	puts(hex);
}

验证:在线进制转换工具

方法二:

#include 
#include 
#include 
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]='';
           break;
        }
   }
   sprintf(out,"%X.",integer);
   strcat(out,out1);
   printf("out=%sn",out);

return 0;
}

验证:在线进制转换工具
       

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5703560.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存