본문 바로가기
Develop/백준 (Cpp)

[백준] 24389번 : 2의 보수 (C++)

by Tarra 2023. 8. 1.

24389번 : 2의 보수


문제)

컴퓨터는 뺄셈을 처리할 때 내부적으로 2의 보수를 사용한다. 어떤 수의 2의 보수는 해당하는 숫자의 모든 비트를 반전시킨 뒤, 1을 더해 만들 수 있다. 이때, 32비트 기준으로 처음 표현했던 수와 그 2의 보수의 서로 다른 비트 수를 출력하라. 

 

 

 

입력 :

첫째 줄에 정수 N(1 ≤ N ≤ 10e9)이 주어진다.

 

 

 

출력 :

첫째 줄에 N N의 보수의 서로 다른 비트 수를 출력한다.

 

 

 

 

 

풀이)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <bitset>
 
using namespace std;
 
int n;
int main()
{
    cin >> n;
 
    // 문제에서 요구하는 수를 32비트로 표현한다.
    bitset<32> temp = n ^ (~n + 1);
 
    // 다른 비트수를 체크할 변수
    int cnt = 0;
 
    // bitset의 .any()를 사용하여 temp에 1이 있는지 검사한다.
    // .any() 비트셋 중 하나라도 1이 있으면 1을 반환, 모두 0이면 0을 반환
    while (temp.any())
    {
        // .test(n) : n번째 비트가 1인지를 검사.
        if (temp.test(0)) cnt++;
        temp >>= 1// shift 연산
    }
 
    cout << cnt;
 
    return 0;
}
cs

 

 


출처 : https://www.acmicpc.net/problem/24389 

 

24389번: 2의 보수

컴퓨터는 뺄셈을 처리할 때 내부적으로 2의 보수를 사용한다. 어떤 수의 2의 보수는 해당하는 숫자의 모든 비트를 반전시킨 뒤, 1을 더해 만들 수 있다. 이때, 32비트 기준으로 처음 표현했던 수와

www.acmicpc.net