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
'Develop > 백준 (Cpp)' 카테고리의 다른 글
[백준] 28239번 : 배고파(Easy) (C++) (0) | 2023.08.01 |
---|---|
[백준] 25166번 : 배고픈 아리의 샌드위치 구매하기 (C++) (0) | 2023.08.01 |
[백준] 12833번 : XORXORXOR (C++) (0) | 2023.08.01 |
[백준] 27960번 : 사격 내기 (C++) (0) | 2023.08.01 |
[백준] 14405번 : 피카츄 (C++) (0) | 2023.07.31 |