#include <stdio.h>
int bin2dec(char a[]);
void tobinstr(char a[], int);
int main() {
int n, menu=1;
char numstr[100]={0,};
while(menu!=7) {
puts("***********************");
puts("*1. 2진수-> 8진수로: ");
puts("*2. 2진수->10진수로: ");
puts("*3. 8진수-> 2진수로: ");
puts("*4. 8진수->10진수로: ");
puts("*5. 10진수-> 2진수로: ");
puts("*6. 10진수-> 8진수로: ");
puts("*7. 끝내기");
puts("***********************");
printf("선택=");
scanf("%d", &menu);
fflush(stdin);
switch(menu) {
case 1:
printf("2진수입력: ");
gets(numstr);
n=bin2dec(numstr);
printf("8진수: %o\n", n);
break;
case 2:
printf("2진수입력: ");
gets(numstr);
n=bin2dec(numstr);
printf("10진수: %d\n", n);
break;
case 3:
printf("8진수입력: ");
scanf("%o", &n);
tobinstr(numstr, n);
printf("이진수: %s\n", numstr);
break;
case 4:
printf("8진수입력: ");
scanf("%o", &n);
printf("10진수: %d\n", n);
break;
case 5:
printf("십진수입력: ");
scanf("%d", &n);
tobinstr(numstr, n);
printf("이진수: %s\n", numstr);
break;
case 6:
printf("십진수입력: ");
scanf("%d", &n);
printf("8진수: %o\n", n);
break;
}
}
return 0;
}
// 주어진 2진수를 나타내는 문자열을 정수로 바꾸는 함수입니다.
int bin2dec(char a[]) {
// 문자열의 인덱스를 위한 변수 i 정수값을 위한 변수 x
int i=0, x=0;
// 문자열의 끝을 만날때 까지 가면서
while(a[i]) {
// 지금까지 읽은(처리한) 문자열 다음에 문자가 나오면 정수의 값은 2배가 되고
// 현재 문자가 '0' 이거나 '1'이냐에 따라서 0이나 1이 더해지게 된다.
x=x*2+a[i]-'0';
i=i+1; // 다음 문자로 가기 위해서 i를 증가시켜준다.
}
return x;
}
// 주어진 정수를 2진수를 나타내는 문자열로 바꾸어 주는 함수이다.
void tobinstr(char a[], int n) {
unsigned i=0, x=1;
x=1<<31; // 최상위 비트만 1로 준다. 앞의 0비트를 출력하지 않기 위해서
while((n&x)==0) x=x>>1; // n의 비트가 0 이라면 한 비트씩 내려옵니다.
// x의 값이 0 보다 클 경우 계속한다.
while(x>0) {
// 만약 n이 x가 나타내는 비트자리가 있다면 '1'을 없다면 '0'을
// 문자열에 넣어준다.
if(n&x) a[i]='1'; else a[i]='0';
// i의 값을 1증가 시킨다.
i=i+1;
// x를 오른쪽으로 한비트씩 보냅니다.
x=x>>1;
}
// a는 문자열이기 때문에 마지막에 널문자를 넣어 준다.
a[i]=0;
}
'c·c++ > c 프로그래밍' 카테고리의 다른 글
간단한 계산기 (0) | 2012.10.19 |
---|---|
Newton-Raphson Method (0) | 2012.10.13 |
달력출력 (0) | 2012.10.10 |
원형큐 (0) | 2012.10.08 |
c언어에서 %[^\n] 가 의미하는 것이 무엇인가요 ? (0) | 2012.10.08 |