시작하기 앞서 Int형이 32bit라고 할것이다. (uint32_t)사용
1. QUEUE 배열 + For문을 이용하기
시간이 많이 걸릴 수 있다.
연산횟수가 많아질 수 있다.
#include <stdio.h>
#include <stdint.h>
uint32_t i; //i는 0
uint32_t array[32]; //0~31 index를 0으로 초기화
int main() {
uint32_t data;
scanf("%d", &data);
while(data) {
array[i++] = data%2;
data /= 2;
}
for(i; i>=0; i--) {
printf("%d", array[i]);
}
return 0;
}
2. 재귀함수를 이용한다. (STACK)
QUEUE 배열+ For문을 이용하는것보다 효율적일 수 있다.
#include <stdio.h> //standard Input Output
#include <stdint.h> //32bit형 int인 uint32_t 표준을 사욯하기 위해 라이브러리를 불러온다
void f(int n) {
if (n==0) return ;
f(n/2);
printf("%d", n%2);
}
int main() {
uint32_t data;
scanf("%d", &data);
f(data);
return 0;
}
3. 비트연산을 이용한다.
내가 생각했을 때, 시간도 적게 걸릴 것이고, 간단하고 가독성도 좋다.
#include <stdio.h> //standard Input Output
#include <stdint.h> //32bit형 int인 uint32_t 표준을 사욯하기 위해 라이브러리를 불러온다
int main() {
uint32_t data; //32bit형 int인 data를 선언한다
scanf("%d", &data); //data를 입력받는다
for(int i=31; i>=0; i--) { //순서대로 출력하기위해 31부터 0까지 출력한다
printf("%d", (data >> i) & 0x01); //데이터를 i번만큼 Shift한것을 1과 AND 연산한다
}
return 0;
}
4. 비트필드 구조체와 UNION을 사용한다.
비트연산보다 비효율적이다.
'C' 카테고리의 다른 글
배열 a에서의 a와 &a를 포인터에 저장할 때의 차이점 (0) | 2022.07.02 |
---|---|
순차탐색과 이진탐색 [C] (0) | 2022.05.23 |
분할정복법에서의 정렬, 퀵정렬과 합병정렬 [C] (0) | 2022.05.23 |
링크드리스트로 이진트리를 구현하기 [C] (0) | 2022.05.23 |
이진트리를 만들어 탐색해보자! [C] (0) | 2022.05.23 |