十六进制(简写为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; }
验证:在线进制转换工具
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)