กำหนดจำนวนเต็ม num และช่วง [left, right] (1-indexed จาก LSB) นับจำนวน bit 1 ในช่วงนี้
ตัวอย่าง: num=50 (110010), left=2, right=5 → bits: positions 2-5 = 1001 → count = 2
วิธีแก้ปัญหา
- สร้าง mask ที่มี bit 1 ในช่วง [left, right]:
mask = ((1< 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