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

โปรแกรม C# นับบิต 1 (Set Bits) ในเลข

นับจำนวนบิตที่เป็น 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) ไม่ใช่จำนวนบิตทั้งหมด