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

Đếm số bit đã đặt trong một phạm vi trong C ++


Chúng ta được cung cấp một số nguyên, giả sử là num và phạm vi có 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 đã đặt.

Các bit tập hợp trong một số nhị phân được biểu diễn bằng 1. 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 tạo thành dưới dạng kết hợp của 0 và 1. Vì vậy, chữ số 1 được gọi là bit set trong các điều kiện của máy tính.

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

Đầu ra - Đếm tổng số bit đặ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 chỉ có 0’s. Vì vậy, số đếm là 2.

Đầu vào - int number =42, left =3, right 4

Đầu ra - Đếm tổng số bit đặt trong một phạm vi là - 1

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 =3 có bit là 1 và kết thúc sang phải =4 là có bit 0 và ở giữa phạm vi chúng ta chỉ có một chữ số. Vì vậy, số đếm là 1.

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ố đếm 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 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

  • In số lượng

Ví dụ

#include<iostream>
using namespace std;
//Count total bits in a range
unsigned int bits(unsigned int number, unsigned int left, unsigned int right){
   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";
   }
   //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;
   cout<<"\nCount of total set bits in a range are: "<<count;
}
int main(){
   unsigned int number = 42;
   unsigned int left = 2, right = 5;
   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 digits of 42 is: 00101010
Count of total set bits in a range are: 2