一、绪论
十六进制(Hexadecimal):在数学中是一种逢16进1的进位制。一般用数字0到9和字母A到F(或a~f)表示,其中:A~F表示10~15。
十进制(Decimal System):每相邻的两个计数单位之间的进率都为十;十进制是中华民族的一项杰出创造,在世界数学史上有重要意义。著名的英国科学史学家李约瑟教授曾对中国商代记数法予以很高的评价,"如果没有这种十进制,就几乎不可能出现我们现在这个统一化的世界了",李约瑟说:"总的说来,商代的数字系统比同一时代的古巴比伦和古埃及更为先进更为科学。"
八进制(Octal):一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进1。一些编程语言中常常以数字0开始表明该数字是八进制。八进制的数和二进制数可以按位对应(八进制一位对应二进制三位),因此常应用在计算机语言中。
二进制(binary):在数学和数字电路中指以2为基数的记数系统,以2为基数代表系统是二进位制的。这一系统中,通常用两个不同的符号0(代表零)和1(代表一)来表示。
二、进制之间转换原则
转换原则:不同进制之间的转换本质就是确定各个不同权值位置上的数码。转换正整数的进制的有一个简单算法,就是通过用目标基数作长除法;余数给出从最低位开始的“数字”
基于上述原则详细解释十进制转换成二进制:
十进制整数部分转换:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
十进制小数部分转换:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。
三、具体代码
#include <>
#define BASE_SIZE 32
#define HEX 16
int binary_conversion( int value_t , int target_system_t )
{
int value = value_t;
int target_system = target_system_t;
int target_value [BASE_SIZE] = {0};
int target_value_i = 0;
while( value )
{
target_value[target_value_i] = value % target_system;
value = value / target_system;
target_value_i++;
}
if( target_system == HEX )
{
for( ; target_value_i >= 0; target_value_i-- )
{
printf( "%x", target_value[target_value_i] );
}
}else{
for( ; target_value_i >= 0; target_value_i-- )
{
printf( "%d", target_value[target_value_i] );
}
}
return 0;
}
int mian( void )
{
int input_value = 0;
int target_system = 0;
scanf( "%d,%d", &input_value, &target_system );
binary_conversion( input_value, target_system );
return 0;
}
int binary_conversion( int value_t , int target_system_t )函数就是实现十进制与其他进制数之间的转换,输入参数value_t就是需要转换的数值, 输入参数target_system_t 就是需要把十进制转换为哪种进制数。