当前位置:首页 » 编程语言 » c语言进制转换

c语言进制转换

发布时间: 2022-01-11 11:56:26

c语言进制转换

计算机中常用的数的进制主要有:二进制、八进制、十进制、十六进制。  

2进制,用两个阿拉伯数字:0、1;  

8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;  

10进制,用十个阿拉伯数字:0到9;  

16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。字母不区分大小写。 

下面用余数短除法把十进制数转化为二进制数为例进行说明

1、明确问题。举个例子,我们现在是要将一个十进制数字156转换成二进制数字。先将这个十进制数作为被除数写在一个倒着的“长除法”的符号里。把目标数系的基数(在这里二进制是“2”)作为除数写在这个除法符号的外面。用这个方法将计算过程可视化会更方便理解,因为整个计算过程只需将数字一直除以2。

活用这个方法可以将所有十进制数字转换成任何进制表达。除数为2是因为我们最终想得到的以2为基数的数(即二进制数值) 。如果最终想得到其他数系的数字,用目标数系的基数代替这个方法里二进制的基数2 就可以了。例如,要得到基数为9的数,就用9来代替2作为除数 。最终的结果就是目标数系的数字表达。

(1)c语言进制转换扩展阅读:

十进制--->二进制

对于整数部分,用被除数反复除以2,除第一次外,每次除以2均取前一次商的整数部分作被除数并依次记下每次的余数。另外,所得到的商的最后一位余数是所求二进制数的最高位。

对于小数部分,采用连续乘以基数2,并依次取出的整数部分,直至结果的小数部分为0为止。故该法称“乘基取整法”

十进制--->八进制

10进制数转换成8进制的方法,和转换为2进制的方法类似,唯一变化:除数由2变成8。

Ⅱ C语言程序 进制转换

for(inti=0;i<=k;i++)

printf("%d",a[i]);

因为主程序里面还有数组a的输出!如果你是想说为什么后面输出的数字会超过4个的话,建议数组输出里面采用:

printf("%d",a[i]);

数字输出后加个空格

错误分析:

for循环的执行过程:

初始化-{条件判断成立-函数体-条件变量更新}多次循环执行-条件判断不成立-跳出

因此,循环变量更新表达式(也就是i++)是要比正常的for循环体多进行一次的。也就是说,当i=4的时候,b[4]是没有赋值的。那么,在对a进行赋值的时候,a[0]的值是b在系统创建数组时候采用的默认值(该值根据平台环境的不同变化)。

Ⅲ C语言的进制转换程序

在这里献丑了!

1.将你输入的数通过字符串的方式存储是方便一下的计算的
正如你举得例子,输入137 数组中存入的是 字符型的137 要将
里面的每个字符型的数字转换成数值型的数字就得 *p-'0',因为
字符存储时实际存储的是字符的ASC码, 例如 输入 1(字符型)ASCII码为
49 若不减去0的ASC码 就会以49去参加运算
这个while循环是用于数制转换的.将八进制转换成10进制,其实就是将8进制数码按权展开,137=1*8^2+3*8^1+7*8^0
2这个while就是这个用处,一步一步看下去,加入输入为137存储为字符137
第一次是将字符型的1减去0的asc码就得到了数值型的1 1本来是最高位应该是但是这里得到的只有系数(姑且叫做系数吧而权为8^0=1),由于后面还有两个数,这样通过循环n=n*8+*p-'0';将1的权值提升到了8^2,对第二位也类似.
3.要进行浮点数的进制转换就得找准小数点的位置.然后按照类似的方法就可以了

Ⅳ 任意进制数的转换c语言

任意进制数转换为十进制,可以用 strtol()函数。

函数定义:

long int strtol(const char *nptr,char **endptr,int base);

见 网页链接 网络。

十进制转换为任意进制,可以用itoa()函数。

// itoa 例子
#include<stdio.h>
#include<stdlib.h>
intmain(){
inti;
charbuffer[33];
printf("Enteranumber:");
scanf("%d",&i);//输入整数i
itoa(i,buffer,10);//将i转化为10进制数,存到buffer中
printf("decimal:%s ",buffer);//输出打印buffer
itoa(i,buffer,16);//将i转化为16进制数,存到buffer中
printf("hexadecimal:%s ",buffer);//输出打印buffer
itoa(i,buffer,2);//将i转化为2进制数,存到buffer中
printf("binary:%s ",buffer);//输出打印buffer
return0;}

Ⅳ 用c语言编程:进制转换

上面的仁兄做的不怎样,不能满足要求。我做了一个。你试试!可以放很大的数。我也是菜鸟级的。希望我的付出你会认可!!
#include"stdio.h"
#include"math.h"
#include"ctype.h"
void main()
{
double R,S,N=0;
char a[50],m;
char str[]="0123456789ABCDEF",c[2];
int i=0,j=0,b[50];
long n;
clrscr();
printf("请输入转换前的数据N,进制R和转换后的进制S(R和S请勿超过16):\n");
scanf("%s%lf%lf",&a,&R,&S);
printf("将%.0lf进制数%s转换成%.0lf进制数的结果为:",R,a,S);
if(a[0]=='-')/*当以负数输入的时候输出负号*/
{
printf("-");
a[0]='0';
}
while(a[i]!='\0')/*把输进去的字符型转换成整型*/
{
if(a[i]>='0'&&a[i]<='9')
{
c[0]=a[i];
b[i]=atoi(c);/*数据类型转换*/
}
if(a[i]>='A'&&a[i]<='F')/*在以A至F输入时做处理*/
{
b[i]=a[i]-65+10;/*A的ASCLL为65*/
}
i++;
}
i--;
while(i>=0)/*R进制数N对应10进制的值*/
{
N+=b[i--]*pow(R,j++);
}
n=N;
while(n!=0)/*除以要转换的S进制取余数放到数组b中*/
{
b[++i]=n%(long)S;
n=n/S;
}
while(i>=0)/*数组b倒序输出对应的str的值*/
{
printf("%c",str[b[i--]]);
}
}


Ⅵ C语言中的进制怎么转换啊

关于进制转换,我觉得挺好玩的不就是几个公式吧了,
就如我第一次所学的二进制转换为十进制,十进制转换为二进制,那样的类型其实也挺有趣的
比如:一个二进制数转化为十进制数,如哦我所给的一个二进制数“101101001”我就设十进制数是Z
首先有个公式可套:Z=1*X8+0*X7+1*X6+1*X5+0*X4+1*X3+0*X2+0*X1+1*X0
把只是X换为2,算出来的就是你所得到的此二进制数所对应的十进制数
同理:如八进制数转换为十进制数就是把X换为8,十六进制数转换十进制数把X换为16,
至于二进制数转化为八进制数更有意思;
首先我引进一个例子:这是一个比较特殊的二进制数:111111111111
首先把这组数按三个数划分一组(从右开始划分):如,111,111,111,111 于是结果是7777
然后就分别把化为各组的数组转化为是进制数,最后进把你刚才算出的数按原来的顺序排起来,于是得到的结果就是你想要的
那十六进制就是把数组中的每四个划分一组(从右开始划分的)
如111111111111划分结果为1111,1111,1111, 方法与上面一样,于是它的结果是fff

关于十进制转化二进制,八进制和十六进制,方法都是一样的
同二进制方法雷同。

Ⅶ C语言中如何实现进制转换

1、十进制转换成八进制有两种方法:
(1)间接法:先将十进制转换成二进制,然后将二进制又转换成八进制。
(2)直接法:八进制是由二进制衍生而来的,因此可以采用与十进制转换为二进制相类似的方法,还是整数部分的转换和小数部分的转换,下面来具体讲解一下:
①整数部分
方法:除8取余法,即每次将整数部分除以8,余数为该位权上的数,而商继续除以8,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数起,一直到最前面的一个余数。
②小数部分
方法:乘8取整法,即将小数部分乘以8,然后取整数部分,剩下的小数部分继续乘以8,然后取整数部分,剩下的小数部分又乘以8,一直取到小数部分为零为止。如果永远不能为零,就同十进制数的四舍五入一样,暂取个名字叫3舍4入。
2、十进制的转换到十六进制:
十六进制与八进制有很多相似之处,可以参照上面八进制与十进制的转换实现这两个进制之间的转换。

Ⅷ c语言进制转换

写个递归函数解决,pelles c7.0 实测OK, LZ你这么看呢
#include <stdio.h>
void DecToR(int x, int r)
{
int t;
if(x>0)
{
DecToR(x/r, r);
t = x%r;
printf("%c", t<10?('0'+t):('A'+t-10));
}
return;
}
int main()
{
int n;
int r;
while(scanf("%d%d", &n, &r)!=EOF)
{
if(n<0) printf("-"), n = -n;
DecToR(n, r);
printf("\n");
}
return 0;
}

Ⅸ C语言的进制转换

((unsigned)(x&(1<<(n-1)))>>(n-1))
这个式子会得到
0
或者
1
是int值
puchar()需要括号里面是字符型的,
比如putchar('1'),
没有单引号的0或者1,代表的是ASCII表里面位置是0或者1的字符,明显不是我们想要的,所以需要+'0',相当于’0‘
+
0
=
’0‘,'0'+1=’1‘.
当然也可以直接用printf来进行输出,比如
int
i
=((unsigned)(x&(1<<(n-1)))>>(n-1));
printf(i,%d);
但是明显的效率没有单纯的putchar来的高,完全没有必要

热点内容
安卓上哪里下大型游戏 发布:2024-12-23 15:10:58 浏览:189
明日之后目前适用于什么配置 发布:2024-12-23 14:56:09 浏览:54
php全角半角 发布:2024-12-23 14:55:17 浏览:828
手机上传助手 发布:2024-12-23 14:55:14 浏览:732
什么样的主机配置吃鸡开全效 发布:2024-12-23 14:55:13 浏览:830
安卓我的世界114版本有什么 发布:2024-12-23 14:42:17 浏览:710
vbox源码 发布:2024-12-23 14:41:32 浏览:278
诗经是怎么存储 发布:2024-12-23 14:41:29 浏览:660
屏蔽视频广告脚本 发布:2024-12-23 14:41:24 浏览:419
php解析pdf 发布:2024-12-23 14:40:01 浏览:818