본문 바로가기

C

2진수를 C언어에서 출력하는 여러가지 방법들 [C]

시작하기 앞서 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을 사용한다.

비트연산보다 비효율적이다.