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

นับบิตที่ไม่ได้ตั้งค่าในช่วงใน C++


เราได้รับตัวเลขจำนวนเต็ม สมมติว่า num และช่วงที่มีค่าซ้ายและขวา ภารกิจคือการคำนวณเลขฐานสองของตัวเลขก่อน จากนั้นจึงตั้งค่าการวนซ้ำจากหลักด้านซ้ายจนถึงหลักด้านขวา จากนั้นให้คำนวณบิตที่ไม่ได้ตั้งค่าในช่วงที่กำหนด

บิตที่ไม่ได้ตั้งค่าในเลขฐานสองจะแสดงด้วย 0 เมื่อใดก็ตามที่เราคำนวณเลขฐานสองของค่าจำนวนเต็ม บิตนั้นจะถูกสร้างเป็นการรวมกันของ 0 และ 1 ดังนั้นตัวเลข 0 จึงเรียกว่า unset bit ในแง่ของคอมพิวเตอร์

ป้อนข้อมูล − จำนวนเต็ม =50 ซ้าย =2 ขวา =5

ผลผลิต − จำนวนบิตที่ไม่ได้ตั้งค่าทั้งหมดในช่วงคือ − 2

คำอธิบาย −การแสดงเลขฐานสองของตัวเลข 50 คือ 110010 และเรามีช่วงเริ่มต้นจากซ้าย =2 ซึ่งมีบิตเป็น 1 และสิ้นสุดที่ด้านขวา =5 ซึ่งมีบิต 1 และอยู่ระหว่างช่วงที่เรามี 0 สองตัว ดังนั้นจำนวน unset bits คือ 2

ป้อนข้อมูล − จำนวนเต็ม =42 ซ้าย =1 ขวา 6

ผลผลิต − จำนวนบิตที่ไม่ได้ตั้งค่าทั้งหมดในช่วงคือ − 3

คำอธิบาย − การแสดงเลขฐานสองของตัวเลข 42 คือ 101010 และเรามีช่วงเริ่มต้นจากซ้าย =1 ซึ่งมีบิตเป็น 1 และสิ้นสุดที่ด้านขวา =6 ซึ่งมีบิต 0 และอยู่ระหว่างช่วงที่เรามี 0 สามตัว นับเป็น 3

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • ป้อนตัวเลขในตัวแปรประเภทจำนวนเต็มและช่วงที่มีค่าจำนวนเต็มซ้ายและขวาด้วย

  • ประกาศการนับตัวแปรเพื่อเก็บจำนวนชุดบิตของประเภท unsigned int

  • เริ่มวนซ้ำ FOR จาก i ถึง 1<<7 และ i> 0 และ i ถึง i / 2

  • ภายในลูป ตรวจสอบ num &1 ==TRUE แล้วพิมพ์ 1 อื่น ๆ พิมพ์ 0

  • เริ่มวนลูป FOR จาก i ไปซ้ายจนถึงค่าที่ถูกต้อง

  • ภายในลูป ให้เพิ่มจำนวนหลักทั้งหมดระหว่างช่วงที่กำหนด

  • เริ่มวนรอบในขณะที่คำนวณจำนวนบิตทั้งหมดจนถึงจำนวนไม่ใช่ 0

  • ภายในลูป set count =count + number &1 และ set number>>=1

  • สมมติว่าตัวแปรชั่วคราว a with ((1 <

  • ตั้งค่าการนับด้วยการนับ &a

  • ในท้ายที่สุด ตั้งค่านับเป็นจำนวนบิตทั้งหมดในช่วง - จำนวนชุดบิตทั้งหมดในช่วง

ตัวอย่าง

#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