二进制转换为十进制
注意 top指针指向的是最上面的一个元素的下一个地址。
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
using namespace std;
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10
typedef char ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int stackSize;
}sqStack;
//初始化栈
void InitStack(sqStack *s)
{
s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
if (!s->base)
{
exit(0);
}
s->top = s->base;
s->stackSize = STACK_INIT_SIZE;
}
//压如栈
void Push(sqStack *s, ElemType e)
{
if (s->top - s->base >= s->stackSize)
{
s->base = (ElemType *)realloc(s->base, (s->stackSize + STACKINCREMENT)*sizeof(ElemType));
if (!s->base)
{
exit(0);
}
}
*(s->top) = e;
s->top++;
}
//出栈
void Pop(sqStack *s, ElemType *e)
{
if (s->top == s->base)
{
return;
}
*e = *--(s->top);
}
//求栈中还有的元素个数
int StackLen(sqStack s)
{
return (s.top - s.base);
}
int main()
{
ElemType c;
sqStack s;
int len, i, sum = 0;
InitStack(&s);
cout<<"请输入二进制数,输入#符号表示结束:\n";
cin>>c ;
// printf("请输入二进制数,输入#符号表示结束:\n");
// scanf("%c",&c);
while (c != '#')
{
Push(&s, c);
cin>>c;
}
getchar();//把‘\n’从缓冲区去掉
len = StackLen(s);
cout<<"当前栈的容量是:\n"<<len<<endl;
//printf("当前栈的容量是:%d\n",len);
for (i = 0; i < len; i++)
{
Pop(&s, &c);
sum = sum +(c-48)*pow(2,i);
}
cout<<"当前的十进制数是:\n"<<sum<<endl;
return 0;
}
//请输入二进制数,输入#符号表示结束:
//1111#
//当前栈的容量是:
//4
//当前的十进制数是:
//15
二进制转换为八进制、十六进制
一个字节(8bit)刚好用 两个十六进制数可以表示完整,节省了显示空间。
由于早期的计算机系统都是三的倍数,所以用八进制比较方便。
在进行二进制到八进制转换时,要将二进制数的每三位转换成一个八进制数来表示