นับจำนวนบิตที่เป็น 1 ในการแทนค่าบाइनนารีของเลข
ตัวอย่าง: เลข 11 = ไบนารี 1011 → มีบิต 1 อยู่ 3 ตัว
อัลกอริทึม (Brian Kernighan's Algorithm)
while (num > 0) {
count += num & 1; // ตรวจสอบบิต LSB
num >>= 1; // ขยับขวา 1 บิต
}
ตัวอย่างโค้ดเต็ม
using System;
public class Demo {
public static void Main() {
int count = 0;
int num = 11; // Binary: 1011
while (num > 0) {
count += num & 1;
num >>= 1;
}
Console.WriteLine("Total set bits: " + count);
}
}
ผลลัพธ์
Total set bits: 3
วิธีที่มีประสิทธิภาพกว่า (Kernighan's Algorithm แท้):
while (num > 0) {
num &= (num - 1); // เคลียร์บิต 1 ตัวสุดท้าย
count++;
}
วิธีนี้วนลูปแค่จำนวนบิต 1 เท่านั้น (3 รอบสำหรับ 11) ไม่ใช่จำนวนบิตทั้งหมด