C++ 中計算範圍內的未設定位


給定一個整數,例如 num,以及具有左值和右值的範圍。任務是首先計算數字的二進位制數位,然後從左數位迴圈到右數位,然後在給定範圍內計算未設定的位。

二進位制數中的未設定位由 0 表示。當我們計算整數的二進位制數時,它由 0 和 1 的組合形成。因此,數字 0 在計算機術語中被稱為未設定位。

輸入 − 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。

下面程式中使用的方法如下

  • 將數字輸入到整型變數中,以及具有左值和右值範圍的整數。

  • 宣告一個變數 count 來儲存設定位的總數,型別為無符號整數

  • 從 i 到 1<<7 並 i > 0 以及 i 到 i / 2 開始迴圈 FOR

  • 在迴圈內,檢查 num & 1 == TRUE 則列印 1 否則列印 0

  • 從 i 到左值到右值開始迴圈 FOR

  • 在迴圈內,遞增給定範圍內的數字總數

  • 開始迴圈 while 以計算數字不為 0 時的位總數

  • 在迴圈內,設定 count = count + number & 1 並設定 number >>=1

  • 設定一個臨時變數,例如 a,值為 ((1 << right) - 1) ^ ((1 << (left - 1)) - 1);

  • 並用 count & a 設定 count

  • 最後,將 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

更新於:2020-10-31

196 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.