%3C/text%3E%3C/svg%3E">
💻
💻 IT·개발

비트 수 세기(popcount)·앞뒤 0 개수

입력하면 바로 계산됩니다.

입력값

비트 개수 계산기 쉽게 이해하기 — 개념과 원리

비트 개수(popcount)는 2진수 안의 1의 개수이고, 선행 0과 후행 0은 가장 높은 1 앞과 가장 낮은 1 뒤에 있는 0의 개수입니다. 체스 엔진의 비트보드, 해밍 거리, 오류 정정 부호, 메모리 할당기, 2의 거듭제곱 크기의 해시 테이블, 필드에 필요한 비트 수를 정할 때 쓰입니다. 0부터 4,294,967,295까지의 부호 없는 32비트 수를 넣으면 모두 구해 줍니다.

40의 비트 세기40 = 101000: 1이 2개, 32비트 중 앞쪽 0이 26개, 뒤쪽 0이 3개, 6비트 필요. 40 AND 39 = 32이므로 2의 거듭제곱이 아닙니다.32비트 상자 안의 40앞쪽 0이 26개6비트 사용40 = 32 + 8 = 101000321160814020101이 2개 → 짝수뒤쪽 0이 3개40 AND 39 = 32 ≠ 0→ 2의 거듭제곱이 아님
32비트 중 마지막 6비트만 쓰입니다. 1이 2개라 popcount 2, 끝의 0이 3개라 trailing zero 3입니다.

계산 방법

원리

2의 보수에서 −x는 NOT x + 1입니다. NOT x에 1을 더하면 끝의 1들이 0으로 바뀌다가 처음 만나는 0에서 멈추는데, 그 자리가 바로 x의 가장 낮은 1입니다. 그래서 x AND −x는 그 비트 하나만 남깁니다. 반대로 1을 빼면 가장 낮은 1이 0이 되고 그 아래가 모두 1이 되므로, x AND (x − 1)은 가장 낮은 1을 지웁니다. 이 값이 0이라면 1이 하나뿐이었다는 뜻이고, 이것이 2의 거듭제곱의 정의입니다.

예제 풀이

  1. 입력 40은 32 + 8, 2진수로 101000입니다.
  2. 1이 두 개이므로 popcount는 2, 패리티는 짝수입니다.
  3. 6비트를 쓰므로 필요 비트 수는 6, 선행 0은 32 − 6 = 26입니다.
  4. 40 AND −40 = 8 = 2³이므로 후행 0은 3입니다.
  5. 40 AND 39 = 101000 AND 100111 = 100000 = 32로 0이 아니므로 2의 거듭제곱이 아닙니다.

결과 해석

필요 비트 수는 값을 담을 최소 필드 크기입니다. 6비트는 0~63을 표현하므로 40이 들어갑니다. 후행 0은 그 수를 나누는 가장 큰 2의 거듭제곱을 알려 줍니다(2³ = 8이 40을 나눕니다). A XOR B의 popcount는 두 비트 패턴의 해밍 거리입니다.

흔한 실수

주의: 입력은 부호 없는 32비트 정수로 변환됩니다. 4,294,967,295를 넘는 수, 음수, 소수는 값이 돌아가거나 잘리므로 큰 수는 64비트 이상을 지원하는 도구로 확인하십시오.

자주 묻는 질문

popcount를 계산하는 CPU 명령어가 있습니까?

많은 프로세서에 있습니다(x86-64의 POPCNT 등). 컴파일러는 __builtin_popcount 같은 내장 함수로 제공합니다.

다음 2의 거듭제곱으로 올림하려면 어떻게 합니까?

x > 1이면 2의 (32 − clz32(x − 1))제곱입니다.

후행 0으로 나누어떨어짐을 알 수 있습니까?

후행 0이 k개이면 2ᵏ로는 나누어떨어지고 2ᵏ⁺¹로는 나누어떨어지지 않습니다.

출처: Henry S. Warren Jr., Hacker's Delight, 2nd ed., Addison-Wesley, 2012, Chapter 5 · Ecma International, ECMA-262 ECMAScript Language Specification

2026년 11월 8일 확인. 표준 공식과 RFC/IEEE 정의를 사용해 브라우저 안에서만 계산합니다. 입력한 내용은 어디에도 전송되지 않습니다.

💻 IT·개발 계산기 전체 →🏠 홍라이프 계산기 홈 →