เราได้รับจำนวนเต็มสมมติว่า num และงานคือการคำนวณเลขไบนารีของตัวเลขก่อน แล้วคำนวณบิตไม่เซ็ต (unset bits) ทั้งหมดของตัวเลข
บิตไม่เซ็ตในตัวเลขไบนารีแทนด้วย 0 ทุกครั้งที่เราคำนวณตัวเลขไบนารีของค่าจำนวนเต็ม มันจะประกอบด้วย 0 และ 1 ดังนั้น ตัวเลข 0 จึงเรียกว่า unset bit ในทางคอมพิวเตอร์
อินพุต − int number = 50
เอาต์พุต − นับบิตไม่เซ็ตทั้งหมดในตัวเลขคือ − 3
คำอธิบาย − การแทนค่าไบนารีของตัวเลข 50 คือ 110010 และถ้าคำนวณเป็นตัวเลข 8 หลัก จะมี 0 เพิ่มอีกสองตัวด้านหน้า ดังนั้นบิตไม่เซ็ตทั้งหมดในตัวเลขคือ 3
อินพุต − int number = 10
เอาต์พุต − นับบิตไม่เซ็ตทั้งหมดในตัวเลขคือ: 6
คำอธิบาย − การแทนค่าไบนารีของตัวเลข 10 คือ 00001010 และถ้าคำนวณเป็นตัวเลข 8 หลัก จะมี 0 เพิ่มอีกสี่ตัวด้านหน้า ดังนั้นบิตไม่เซ็ตทั้งหมดในตัวเลขคือ 6
วิธีการที่ใช้ในโปรแกรมด้านล่าง
รับตัวเลขในตัวแปรประเภทจำนวนเต็ม
ประกาศตัวแปร count เพื่อเก็บจำนวนบิตเซ็ตทั้งหมดแบบ unsigned int
เริ่มลูป FOR จาก i = 1<<7 และ i > 0 และ i = i / 2
ภายในลูป ตรวจสอบ num & 1 == TRUE แล้วพิมพ์ 1 มิฉะนั้นพิมพ์ 0
ภายในลูป เพิ่มค่าจำนวนหลักทั้งหมดในตัวเลข
เริ่มลูป while เพื่อคำนวณจำนวนบิตทั้งหมดจนกว่าตัวเลขจะไม่เป็น 0
ภายในลูป ตั้ง count = count + number & 1 และตั้ง number >>=1
ตั้ง count เป็น จำนวนหลักทั้งหมดในตัวเลข - จำนวนบิตเซ็ตในตัวเลข
พิมพ์ count
ตัวอย่าง
#include<iostream> using namespace std; //Count total unset bits in a number unsigned int unset_bits(unsigned int number){ unsigned int total_digits = 0; unsigned int count = 0; unsigned i; //display the total 8-bit number cout<<"8-bit digits of "<<number<<" is: "; for (i = 1 << 7; i > 0; i = i / 2){ (number & i)? cout<<"1": cout<<"0"; total_digits++; } //calculate the total unset bits in a number while (number){ count += number & 1; number >>= 1; } count = total_digits - count; cout<<"\nCount of total unset bits in a number are: "<<count; } int main(){ int number = 50; unset_bits(number); return 0; }เอาต์พุต
ถ้าเรารันโค้ดด้านบนจะได้ผลลัพธ์ดังนี้ −
8-bit digits of 50 is: 00110010 Count of total set bits in a number are: 5