Computer >> Máy Tính >  >> Lập trình >> C ++

Đếm các bit chưa đặt trong một phạm vi trong C ++

Chúng tôi được cung cấp một số nguyên, giả sử là num và phạm vi với các giá trị bên trái và bên phải. Nhiệm vụ trước tiên là tính toán chữ số nhị phân của một số, sau đó thiết lập vòng lặp từ chữ số bên trái cho đến chữ số bên phải và sau đó trong phạm vi đã cho tính toán các bit chưa được đặt.

Các bit chưa được đặt trong một số nhị phân được biểu thị bằng 0. Bất cứ khi nào chúng ta tính toán số nhị phân của một giá trị số nguyên thì nó được hình thành dưới dạng kết hợp của 0’s và 1’s. Vì vậy, chữ số 0 được gọi là bit chưa đặt trong điều kiện của máy tính.

Đầu vào - int number =50, left =2, right =5

Đầu ra - Tổng số bit chưa đặt trong một phạm vi là - 2

Giải thích − Biểu diễn nhị phân của một số 50 là 110010 và chúng ta có phạm vi bắt đầu từ trái =2 có bit là 1 và kết thúc sang phải =5 có bit 1 và ở giữa phạm vi chúng ta có hai số 0. Vì vậy, số lượng bit chưa đặt là 2.

Đầu vào - int number =42, left =1, right 6

Đầu ra - Tổng số bit chưa đặt trong một phạm vi là - 3

Giải thích - Biểu diễn nhị phân của một số 42 là 101010 và chúng ta có phạm vi bắt đầu từ trái =1 có bit là 1 và kết thúc sang phải =6 có bit 0 và ở giữa phạm vi chúng ta có ba số 0. Vì vậy, số đếm là 3.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Nhập số vào một biến kiểu số nguyên và cả phạm vi có giá trị nguyên bên trái và bên phải.

  • Khai báo một số biến để lưu trữ tổng số các bit đã đặt của kiểu unsigned int

  • Bắt đầu vòng lặp FOR từ i đến 1 <<7 và i> 0 và i đến i / 2

  • Bên trong vòng lặp, kiểm tra num &1 ==TRUE sau đó in 1 khác in 0

  • Bắt đầu vòng lặp FOR từ i sang trái cho đến giá trị bên phải

  • Trong vòng lặp, hãy tăng tổng số chữ số giữa phạm vi đã cho

  • Bắt đầu lặp trong khi để tính tổng số bit cho đến khi số không phải là 0

  • Bên trong vòng lặp, đặt count =count + number &1 và cũng đặt number>> =1

  • Đặt một biến tạm thời, giả sử, a với ((1 <

  • Ngoài ra, hãy đặt số lượng bằng số lượng &a

  • Cuối cùng, bộ đếm là tổng số bit trong một dải - tổng số bit đã đặt trong một dải.

Ví dụ

#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;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

8-bit number of 80 is: 01010000
Count of total unset bits in a range are: 2