10진수에서 2진수로의 변환 CPP

whipbaek·2022년 2월 4일
0

알고리즘

목록 보기
2/5

Decimal to Binary

십진수의 숫자를 이진수로 바꾸는 방법에 대해서 정리해보려 한다.

Solution 1

나는 일반적으로 2를 나누어서 나머지값으로 2진수로 변환하는 방식을 사용하였다.

void dectobin1(int n) {
	
	vector<int> bin;

	while (n > 0) {
		bin.push_back(n % 2);
		n /= 2;
	}

	for (int i = 0; i < bin.size(); i++) {
		cout << bin[i];
	}
}

Input : 30 -> Output : 01111

보편적인 방법이나, 저장이 반대로 된다는 단점이 있다.

Solution 2

두번째는 비트 연산자를 사용하는 것이다.

void dectobin2(int n) {
	vector<int>bin;

	for (int i = 0; i < 5; i++) {
		bin.push_back(n & 1);
		n = n >> 1; // ( n /= 2 와 같음 )
	}

	for (int i = 0; i < bin.size(); i++) {
		cout << bin[i];
	}
}

Input : 30 -> Output : 01111

1과 n을 and해서 2진수 값을 알아내는 방식이다. for문을 활용하여서 자릿수 까지 지정할 수 있도록 변경하였다. 그러나 이 방법 또한 저장이 반대로 이루어 진다.

Solution 3

void dectobin3(int n) {
	vector<int>bin;

	for (int i = 4; i >= 0; i--) {
		bin.push_back((n >> i) & 1);
	}

	for (int i = 0; i < bin.size(); i++) {
		cout << bin[i];
	}
	
}

Input : 30 -> Output : 11110

2번 솔루션을 활용한 방식이다. 기존에는 숫자의 끝에서부터 and가 이루어졌기에 저장이 거꾸로 되었다. 그렇기에 앞의 비트부터 땡겨와서 1과 and를 하고, 저장을 하면 원하는 순서대로 저장이 이루어진다.

profile
코딩 및 CS에 관하여 공부합니다.

0개의 댓글