코딩테스트

C++ 십진수를 이진수로 변환했을 때, 1의 개수 구하기

9won 2022. 9. 27. 23:11
반응형

 

십진수를 이진수로 변환했을 때, 1의 개수 구하는 방법

 

 

1. 비트 AND 연산을 사용하는 방법

// 비트 AND 연산 활용방법

// 자연수 n이 주어졌을 때
// n 이 2의 20승보다 작은 경우로 가정 (아래 for문에서 20으로 범위를 잡은 이유)

int cnt = 0;

for (int i=0; i<20; i++)
{
	// i 만큼 shift 하며 비트 AND연산하여, 1이 있는 경우 ++
	if (n & 0x01 << i)
		cnt++;
}

 

 

2. bitset 사용하는 방법

// bitset 활용방법

// 자연수 n이 주어졌을 때
// n 이 2의 20승보다 작은 경우로 가정 (아래 for문에서 20으로 범위를 잡은 이유)

#include <bitset>
using namespace std;

// bitset 중에서 1인 비트의 개수를 반환
int cnt = bitset<20>(n).count();

 

bitset 사용 참고사이트

https://hellowoori.tistory.com/52

 

STL bitset

STL bitset STL bitset 이란? bitset 헤더파일에서 제공하는 STL로써, 고정된 크기의 N비트 배열을 나타낸다. 이때 채워진 것은 true로 1이며,  채워지지 않은 것은 false이며 0이다. 컴파일시 비트셋의 크기

hellowoori.tistory.com

 

bitset 사용법

헤더파일 #include <bitset>
선언 bitset<할당할 비트 수> 변수명
[n] n + 1 번째(인덱스 n)비트가 1인지 0인지 검사
.test(n) n + 1 번째(인덱스 n)비트가 1인지 0인지 검사
.all() 모든 비트(all)가 1이면 1(true) 그렇지 않으면 0(false)을 반환
.any() bitset 중 하나라도(any) 1이면 1(true)을 반환
한 개라도 1이 없다면, 즉 모두 0일 때 0(false)을 반환
.none() bitset 중 1이 하나도 없다면(none), 즉 모두 0이면 1(true)을 반환
.count() bitset 중에서 1인 비트의 개수를 반환
.size() bitset의 크기를 구한다
.set() 전체 비트를 1로 셋팅
.set(n, true/false) n + 1번째(인덱스 n)비트를 1(true)또는 0(false)으로 셋팅
.reset() 전체 비트를 0으로 리셋
.flip 전체 비트를 토글. 0은 1로, 1은 0으로
.flip(n) n + 1 번째(인덱스 n)비트를 토글. 0은 1로, 1은 0으로
.to_string() 전체 비트를 string화 시킨다
.to_ulong() / .to_ullong() 전체 비트를 unsigned long / unsigned long long의 값으로 바꿔준다
operator&=
operator|=
operator^=
operator~
AND, OR, XOR and NOT 비트 연산을 수행
operator<<=
operator>>=
operator<<
operator>>
left shift연산과 right shift 연산을 수행

 

반응형