今天对十进制转二进制、十进制转十六进制,的讲解,日常生活中,我们用得最多的是十进制,
但是在C语言中我们都是使用二进制和十六进制。
二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。
它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。
当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。
计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。
20世纪被称作第三次科技革命的重要标志之一的计算机的发明与应用,
因为数字计算机只能识别和处理由‘0’.‘1’符号串组成的代码。其运算模式正是二进制。
19世纪爱尔兰逻辑学家乔治布尔对逻辑命题的思考过程转化为对符号"0''.''1''的某种代数演算,
二进制是逢2进位的进位制。0、1是基本算符。因为它只使用0、1两个数字符号,非常简单方便,
易于用电子方式实现。
二进制数据的表示法
二进制数据也是采用位置计数法,其位权是以2为底的幂。例如二进制数据110.11,逢2进1,
其权的大小顺序为2²、2¹、2º、 、 。对于有n位整数,m位小数的二进制数据用加权系数展开式表示,
可写为:
二进制数据一般可写为:
【例】将二进制数据111.01写成加权系数的形式。
二进制和十六进制,八进制一样,都以二的幂来进位的。
十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。
它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;
N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。
【例】
16进制的20表示成10进制就是:2×16¹+0×16º=32
10进制的32表示成16进制就是:20
十进制数可以转换成十六进制数的方法是:十进制数的整数部分“除以16取余”,十进制数的小数部分“乘16取整”,进行转换。
比如说十进制的0.1转换成八进制为0.0631463146314631。就是0.1乘以8=0.8,不足1不取整,0.8乘以8=6.4,取整数6,
return buf;
}
但是在C语言中我们都是使用二进制和十六进制。
二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。
它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。
当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。
计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。
20世纪被称作第三次科技革命的重要标志之一的计算机的发明与应用,
因为数字计算机只能识别和处理由‘0’.‘1’符号串组成的代码。其运算模式正是二进制。
19世纪爱尔兰逻辑学家乔治布尔对逻辑命题的思考过程转化为对符号"0''.''1''的某种代数演算,
二进制是逢2进位的进位制。0、1是基本算符。因为它只使用0、1两个数字符号,非常简单方便,
易于用电子方式实现。
二进制数据的表示法
二进制数据也是采用位置计数法,其位权是以2为底的幂。例如二进制数据110.11,逢2进1,
其权的大小顺序为2²、2¹、2º、 、 。对于有n位整数,m位小数的二进制数据用加权系数展开式表示,
可写为:
二进制数据一般可写为:
【例】将二进制数据111.01写成加权系数的形式。
二进制和十六进制,八进制一样,都以二的幂来进位的。
十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。
它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;
N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。
【例】
16进制的20表示成10进制就是:2×16¹+0×16º=32
10进制的32表示成16进制就是:20
十进制数可以转换成十六进制数的方法是:十进制数的整数部分“除以16取余”,十进制数的小数部分“乘16取整”,进行转换。
比如说十进制的0.1转换成八进制为0.0631463146314631。就是0.1乘以8=0.8,不足1不取整,0.8乘以8=6.4,取整数6,
0.4乘以8=3.2,取整数3,依次下算。
- #include<stdio.h>
- #include<string.h>
- char *shi_to_er( int n );
- char *shi_to_shiliu( int n );
- int main()
- {
- printf("\n***************************************************************\n");
- printf("* 请选择转换方式: 十进制转二进制“110”、十进制转十六进制“120” *\n");
- printf("***************************************************************\n");
- char a[128] = {0};
- gets(a);
- if( !strcmp(a,"110"))
- {
- int n;
- printf("请输入一个整数!\n");
- scanf("%d",&n);
- char *p = shi_to_er(n);
- puts(p);
- }
- else if( !strcmp(a,"120"))
- {
- int n;
- printf("请输入一个整数!\n");
- scanf("%d",&n);
- char *p = shi_to_shiliu(n);
- puts(p);
- }
- else
- {
- printf("输入错误,请重新输入!\n");
- }
- return 0;
- }
- char *shi_to_er( int n )
- {
- static char buf[32] = {0};
- int i = 0,j;
- while( n )
- {
- buf[i++] = (n % 2) + '0';
- n = n / 2;
- }
- for( j = 0; j < i / 2; j++ )
- {
- buf[j] ^= buf[i - 1 - j];
- buf[i - 1 - j] ^= buf[j];
- buf[j] ^= buf[i - 1 - j];
- }
- return buf;
- }
- char *shi_to_shiliu( int n )
- {
- static char buf[8] = {0};
- int i = 0,j;
- while( n )
- {
- buf[i] = (n % 16);
- if( buf[i] > 10)
- {
- buf[i] = (buf[i] - 10) + 'a';
- }
- else
- {
- buf[i] = buf[i] + '0';
- }
- i++;
- n = n / 16;
- }
- for( j = 0; j < i / 2; j++ )
- {
- buf[j] ^= buf[i - 1 - j];
- buf[i - 1 - j] ^= buf[j];
- buf[j] ^= buf[i - 1 - j];
- }
return buf;
}