二进制与八进制、十六进制转换详解

需积分: 0 2 下载量 90 浏览量 更新于2024-07-11 收藏 11.46MB PPT 举报
"二进制数转换成八进制数和十六进制数是计算机基础知识中的重要概念。这种转换在计算机科学中极为常见,因为二进制、八进制和十六进制是数字系统中常用的基础。二进制是计算机内部处理数据的基本方式,而八进制和十六进制则提供了更简洁的方式来表示二进制数,特别是在编程和内存表示中。 转换方法如下: **二进制到八进制的转换:** 无论是整数还是小数部分,都遵循从低位到高位每3位一组的原则。如果最左边的一组不足3位,就用0填充至3位。然后,将每一组的二进制数转换为其对应的八进制数。八进制数由0到7这8个数字组成,对应二进制的000到111。例如,二进制数1011转换为八进制就是13(1*8^1 + 0*8^0 = 8,1*8^0 = 1)。 **二进制到十六进制的转换:** 同样,从低位到高位每4位一组。不足4位的,用0补足至4位。接着,将每一组的二进制数转换为对应的十六进制数。十六进制使用0到9以及A到F这16个符号,对应二进制的0000到1111。例如,二进制数11010101转换为十六进制是D5(1*16^3 + 1*16^2 + 0*16^1 + 5*16^0 = 213)。 **八进制和十六进制到二进制的转换:** 反向操作,将每个八进制或十六进制位转换为相应的3位或4位二进制数。例如,八进制数72转换为二进制是1110010,十六进制数AF转换为二进制是10101111。 这些转换在编程中尤其有用,因为它们可以帮助简化代码中的数值表示。例如,十六进制常用于表示颜色代码,如HTML中的#FFFFFF表示白色。同时,了解这些转换对于理解计算机硬件和软件的工作原理也至关重要,因为计算机内部所有的运算都是基于二进制的。 此外,计算机的发展历史也值得一提。早期的计算机理论基础由香侬和阿塔纳索夫等人奠定。香侬在布尔代数应用于开关电路分析的工作为现代计算机逻辑设计打下了基础。阿塔纳索夫提出了计算机设计的三个基本原则,强调了二进制运算、电子技术的应用和存储计算分离的概念。冯·诺依曼的设计理念,即冯·诺依曼体系结构,影响了后来的所有现代计算机,其中EDSAC是这一架构的早期实例之一。"

#include<iostream> #include<stdio.h> #include<malloc.h> using namespace std;//声明命名空间 //链栈 typedef struct stacknode{ int data;//数据域 struct stacknode *next;//指针域 }stacknode,*LinkStack; //初始化栈,创建一个空栈 void initLinkStack(LinkStack &L){ L=NULL;//空链站 } //判断栈是否为空 int emptyLinkStack(LinkStack L){ if(L==NULL){ return 0; }else{ return 1; } } //入栈 void pushLinkStack(LinkStack &L,int e){ LinkStack p; p=(LinkStack)malloc(sizeof(stacknode)); p->data=e; p->next=L; L=p; } //出栈 void popLinkStack(LinkStack &L,int &e){ LinkStack p; p=L; e=L->data;//取出栈顶元素给e L=L->next; delete(p); } //十进制转2、8、16进制,采用除基倒取余法 void numberConversionL(int oNumber,int cvNumber){ LinkStack L; //创建栈 int x; initLinkStack(L); //初始化栈 while(oNumber){ x=oNumber%cvNumber; pushLinkStack(L,x);//余数入栈 oNumber=oNumber/cvNumber; } //余数出栈 while(emptyLinkStack(L)){ popLinkStack(L,x); switch(x){ case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9:cout<<x; break; case 10:cout<<"A"; break; case 11:cout<<"B"; break; case 12:cout<<"C"; break; case 13:cout<<"D"; break; case 14:cout<<"E"; break; case 15:cout<<"F"; break; } } } //主函数 int main(){ int oNumber,cvNumber; int oNumberL,cvNumberL; int choose; cout<<"请选择所需功能\n1.使用链栈转换\n2.退出程序"; cout<<endl; //换行 cin>>choose; while(choose!=2){ switch(choose){ case 1:{ cout<<"请输入要转换的十进制数:"<<endl; cin>>oNumberL; cout<<"请输入要转换至的进制,仅限输入2、8以及16:"<<endl; cin>>cvNumberL; numberConversionL(oNumberL,cvNumberL); break; } default: cout<<"\n!!!您的选择不正确,请重新选择!!!\n"; } cout<<endl; //换行 cout<<"请选择所需功能\n1.使用链栈转换\n2.退出程序"; cout<<endl; //换行 cin>>choose; } return 0; }这段代码数制转换器的研究背景和意义

2023-06-08 上传