求2、8、10、16进制之间的转换表
答案:4 悬赏:30 手机版
解决时间 2021-02-06 11:23
- 提问者网友:寂寞梧桐
- 2021-02-05 21:50
求2、8、10、16进制之间的转换表
最佳答案
- 五星知识达人网友:行雁书
- 2021-02-05 22:31
用Windows中的计算器(科学型)即可很方便地进行数制间转换
不必用2、8、10、16进制之间的转换表
不必用2、8、10、16进制之间的转换表
全部回答
- 1楼网友:未来江山和你
- 2021-02-06 00:46
#include
#include
#include "stdlib.h"
#include
#define size 100
//定义一个栈
typedef struct
{
int x[size];
int top ;
}stack;
//栈初始化
void init(stack &p){
p.top=0;
}
//入栈
int push(stack &p,int &e){
if (p.top0)
{
e=p.x[--p.top];
return 1;
}
return 0;
}
//将 n进制数据转化为十进制表示
void td(char s[],int n,int &num){
char *p;
int e;
p=s;
num=0;
while(*p){
if(*p>='A') //16 进制转化
e=*p-'A'+10;
else
e=*p-'0';
p++;
num=num*n+e;
}
}
//将十进制转化为 m 进制
void tp(int num,int m,char s[]){ //
int n=0,e;
char *p;
stack b; init(b);
p=s;
while(num){ //将十进制数据逐位分离 压入栈中 此时 数据为倒序
n=num%m;
if(n>9)
e=n-10+'A';
else
e=n+'0';
push(b,e);
num/=m;
}
while(pop(b,e)){ //从栈中取出元素,存入数组 s 中 此时 数据为顺序
*p=e;
p++;
}
*p='\0'; //在数组 尾部加结束标志
}
int check(char s[],int n){
char *p;
p=s;
if(n<=10){
while(*p){
if(*p-'0'>n)
return 1;
p++;
}
}
else if(n>10){
while(*p){
if(*p>='A'&&*p-'A'+10>n)
return 1;
p++;
}
}
return 0;
}
void trans(char s[],int n,int m){
int *p,num;
td(s,n,num);
s[0]='\0';
tp(num,m,s);
}
void main(){
int n,m;
char s[size],c;
int fp=1; //是否结束的标志
do{
puts("\t\t\t数据的各个进制之间的转化\n");
s[0]='\0'; //数组初始化
printf("\n输入一个数据: "); gets(s); //读入数据 字符串型
printf("\b输入原来的进制 和 要转化的进制, 如 10-2 : ");
scanf("%d%c%d",&n,&c,&m); //读入 进制转化 由 n进制转化为 m进制 输入形式 如:10-2 16-2
if(check(s,n)) { //判断是否合法
printf("\n\t错误 !输入的数据与进制不相配, 按任意键,继续输入。");
getch();
}
else{
printf("\n结果\n\t\t\t%d 进制 : %s ",n,s);
trans(s,n,m);//转化
printf("\n \t\t\t%d 进制 : %s \n\n",m,s); //输出 数据 字符串型
printf("\t\t\t继续输入 1, 退出输入 0: ");
scanf("%d",&fp);
}
c=getchar(); //读取 回车键
system("cls");
}while(fp);
}
- 2楼网友:举杯邀酒敬孤独
- 2021-02-05 23:36
十进制整数转换r进制(r可以是任何整数,比如3、5、7)整数,方法就是除r取余,十进制转八或十六进制方法类似转二进制,除以基数取余就行了,比如转八进制就除8,转十六进制就除16。 二进制和八进制、十六进制之间转换采用的是分组转换法,因为2、8、16之间是存在幂的关系的。所以,二级制转八进制,以小数点为中心向两边(二进制小数也可以转为八进制小数)分组,每3位为一组,因为2的3次方=8,然后将各组直接写成相应的八进制数就可以了(3位二进制数最大是7,不会超过8)。转十六进制类似,只是这时候需要每4位分一组。反过来,八进制、十六进制转二进制就简单了,只要把每一位都写成二进制数就行了。八进制和十六进制之间一般借助二进制来转换,不容易出错。 十进制小数转r进制小数,方法为乘r取整,每次乘以相应之后基数后取结果的整数部分即可。需要注意的是并非所有的十进制小数都能完全转化为r进制小数,这时就需要取近似值。 二进制(包括小数)转为十进制数时,采用乘权相加法,每一位数乘以相应位的权制然后相加就ok。比如1101.101这个数,以小数点为中心,向左每位权值分别为1、2、4、8,向右每位为0.5、0.25、0.125(也就是二分之一、四分之一、八分之一)。正数1101.101b=1*1+0*2+1*4+1*8(整数部分)+1*0.5+0*0.25+1*0.125(小数部分)=13.625d。八进制、十六进制转十进制方法类似,只要你搞清楚每位的权值就行了。 如此详细,得分当之无愧。
- 3楼网友:雾月
- 2021-02-05 23:11
计算机内部全是二进制,02H
INT 21H
MOV DL,0AH
DIV BH
MOV DL16进制转换为10进制比较简单,提供一种方法,02H
INT 21H
8进制和2进制其实也很容易关键在于如何输出,输出为十进制数
代码如下:
MOV AX,在内存中反映的是16进制数,我现在很忙,我认为可以不断地做除法,用循环结构,56H
MOV BH:
比如16进制数为56H,
MOV AH,AL
MOV AH,等闲下来给你做一个程序实现这些功能,AH
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯