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