Search

C++ | 2진수 ↔ 10진수 변환

Date
2024/07/28
category
C++
Tags
c++

1. 2진수를 정수 데이터로 저장

1.1 10진법 정수 → 2진법 정수

// 10진법 정수를 입력받는다 int dec; std::cin >> dec; int bin = 0; int powerOfTen = 1; // 10진법 정수를 2진법 정수로 변환하여 bin에 저장 for (int i = 0; dec > 0; ++i) { bin += (dec % 2) * powerOfTen; powerOfTen *= 10; dec /= 2; } // 입력받았던 정수를 2진법 정수로 출력 std::cout << bin << std::endl;
C++
복사

1.2 2진법 정수 → 10진법 정수

// 2진법 정수를 입력받는다 int bin; std::cin >> bin; int dec = 0; int powerOfTwo = 1; // 2진법 정수를 10진법 정수로 변환하여 dec에 저장 for (int i = 0; bin > 0; ++i) { dec += (bin % 10) * powerOfTwo; powerOfTwo *= 2; bin /= 10; } // 입력받았던 정수를 10진법 정수로 출력 std::cout << dec << std::endl;
C++
복사

2. 2진수를 bitset에 저장

2.1 bistset이란?

<bitset> 헤더에 선언 존재
고정된 크기의 비트열을 추상화한 자료구조
비트 한 개를 1 bit에 저장 → bool은 1 byte 크기이므로 bool 타입의 컨테이너나 배열을 사용하는 것보다 효율적이다
템플릿 매개 변수로 비트열의 크기를 정한다

2.2 10진법 정수 → 2진법 bitset

// 10진법 정수를 입력받는다 int dec; std::cin >> dec; // 입력받은 정수를 생성자의 인자로 받으면서 크기가 10인 bitset을 만든다 std::bitset<10> bits(dec); // 입력받은 정수를 2진법으로 출력 std::cout << bits << std::endl;
C++
복사
bitset을 출력할 때는 bitset의 크기만큼 자릿수를 채워서 출력한다

2.3 2진법 bitset → 10진법 정수

// 2진수를 string 타입 문자열로 입력받는다 std::string bin; std::cin >> bin; // 입력받은 문자열을 생성자의 인자로 넘기면서 크기가 10인 bitset을 만든다 std::bitset<10> bits(bin); // unsigned long 타입의 10진수 정수 형태로 바꿔서 출력한다 std::cout << bits.to_ulong() << std::endl;
C++
복사
만약 2진수가 음수(2의 보수)로 들어온다면 아래와 같이 처리해야 한다
// 음수인 2진수를 string 타입 문자로 입력받는다 std::string bin; std::cin >> bin; // 입력받은 문자열을 생성자의 인자로 넘기면서 크기가 10인 bitset을 만든다 std::bitset<10> bits(bin); // 모든 비트를 뒤집는다 -> 1의 보수 bits.flip(); // 1의 보수를 unsigned long 타입 정수로 바꾼후 1을 더한다 -> 2의 보수 // unsigned long은 음수가 될 수 없으므로 int로 형변환 후 -1을 곱한다 std::cout << -(static_cast<int>(bits.to_ulong()) + 1) << std::endl;
C++
복사
bitset을 바로 음수로 표현할 수는 없어서 양의 정수로 바꾼 후 -1을 곱한다