1. 10진수 → 2진수
(1) Stack 활용
#include <stack>
int num = 6;
stack<int> bitStack;
while(num != 0)
{
if(num % 2 == 1)
bitStack.push(1);
else
bitStack.push(0);
num /= 2;
}
while(!bitStack.empty())
{
cout << bitStack.top(); // 110
bitStack.pop();
}
stack의 결과는 최상위 비트가 항상 1이다.
(2) bitset 활용
#include <bitset>
int num = 6;
bitset<8> numToBit(num);
cout << numToBit; // 00000110
bitset은 bit의 크기를 사전에 정의해야하므로 쓸데없는 자릿수에 0이 채워진다는 단점이 있다.
2. 2진수 → 10진수
(1) stoi 활용
string binary = "1101";
int decimal = stoi(binary, nullptr, 2);
cout << decimal; // 13
(2) 수동연산
string binary = "1101";
int decimal = 0;
for(char bit : binary)
{
decimal = decimal * 2 + (bit - '0');
}
cout << decimal; // 13
(3) bitset 활용
string binary = "1101";
int decimal = bitset<4>(binary).to_ulong();
cout << decimal; // 13
사전에 비트 크기를 정해줘야하는 번거로움이 있다. 그래도 10진수에서 2진수로 변환하는 것과 달리 비트의 크기를 넉넉하게 설정해놓아도 결과에 변함이 없다.
'코딩테스트 > 알고리듬' 카테고리의 다른 글
[코딩테스트] value 값을 기준으로 정렬 (0) | 2025.02.25 |
---|---|
[코딩테스트] 피보나치 수 (0) | 2025.02.18 |
[코딩테스트] 문자열 대소문자 변환 (0) | 2025.02.13 |
[코딩테스트] 문자열 형변환 (0) | 2025.02.12 |
[코딩테스트] Split 문자열 자르기 (0) | 2025.02.11 |