Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Count set bits in a range in C++: นับ bit 1 ในช่วงตำแหน่งที่กำหนด

กำหนดจำนวนเต็ม num และช่วง [left, right] (1-indexed จาก LSB) นับจำนวน bit 1 ในช่วงนี้

ตัวอย่าง: num=50 (110010), left=2, right=5 → bits: positions 2-5 = 1001 → count = 2

วิธีแก้ปัญหา

  1. สร้าง mask ที่มี bit 1 ในช่วง [left, right]: mask = ((1<
  2. count = __builtin_popcount(num & mask)

ตัวอย่างโค้ด C++

#include <bits/stdc++.h>
using namespace std;

int countSetBitsInRange(unsigned int num, int left, int right) {
    unsigned int mask = ((1u << right) - 1) ^ ((1u << (left - 1)) - 1);
    return __builtin_popcount(num & mask);
}

int main() {
    cout << countSetBitsInRange(50, 2, 5); // 2
    cout << countSetBitsInRange(42, 3, 4); // 1
}

Input

50, left=2, right=5

Output

2