Decimal to Binary
십진수의 숫자를 이진수로 바꾸는 방법에 대해서 정리해보려 한다.
나는 일반적으로 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
보편적인 방법이나, 저장이 반대로 된다는 단점이 있다.
두번째는 비트 연산자를 사용하는 것이다.
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문을 활용하여서 자릿수 까지 지정할 수 있도록 변경하였다. 그러나 이 방법 또한 저장이 반대로 이루어 진다.
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를 하고, 저장을 하면 원하는 순서대로 저장이 이루어진다.