การนับชุดบิตหมายถึงการนับ 1'S ของจำนวนเต็มที่กำหนด สำหรับสิ่งนี้ เรามีวิธีแก้ปัญหาหลายอย่างที่สามารถใช้ได้ สำหรับกรณีนี้ เรามีเลขฐานสอง (การแสดงเลขฐานสองของจำนวนเต็ม) ซึ่งเราต้องนับเลข 1 ออกจากสตริง
ในการนับจำนวน 1 เราจะนำสตริง สำรวจแต่ละองค์ประกอบ และนับจำนวน 1 ทั้งหมดของสตริง ตัวอย่างเช่น หากเราป้อน 17 ผลลัพธ์จะเป็น 2 เพราะเลขฐานสองของ 17 คือ 10001 ที่มี 1 สองตัว
Input: Enter a positive integer: 6 Output: 2
คำอธิบาย
การแทนค่าไบนารีของ 6 คือ 110 ซึ่งมี 2 ชุดบิต
วิธีการวนซ้ำนี้ต้องใช้การวนซ้ำหนึ่งครั้งต่อบิต มันวิ่งผ่านทุกบิตของจำนวน การวนซ้ำจะสิ้นสุดลงเมื่อไม่มีการตั้งค่าบิตเพิ่มเติม ในกรณีที่เลวร้ายที่สุด สำหรับคำแบบ 32 บิตที่มีเฉพาะชุดบิตที่สำคัญที่สุด คำนั้นจะวนซ้ำ 32 ครั้ง วิธีแก้ปัญหานี้เป็นวิธีที่ง่ายที่สุดและมีประโยชน์หากจำนวน 1 มีค่าน้อยและมีนัยสำคัญน้อยที่สุด
ตัวอย่าง
#include <stdio.h> int main(void) { unsigned int n = 34; for (c = 0; n; n >>= 1) { c += n & 1; } printf("%d\n", c); }