Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

โปรแกรม C/C++ สำหรับ Count set bits เป็นจำนวนเต็ม?


การนับชุดบิตหมายถึงการนับ 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);
}