เราได้รับตัวเลขจำนวนเต็ม สมมติว่า num และช่วงที่มีค่าซ้ายและขวา ภารกิจคือการคำนวณเลขฐานสองของตัวเลขก่อน จากนั้นจึงตั้งค่าการวนซ้ำจากหลักด้านซ้ายจนถึงหลักด้านขวา จากนั้นให้คำนวณชุดบิตในช่วงที่กำหนด
ชุดบิตในเลขฐานสองจะถูกแทนด้วย 1 เมื่อใดก็ตามที่เราคำนวณเลขฐานสองของค่าจำนวนเต็ม มันจะถูกสร้างขึ้นเป็นการรวมกันของ 0 และ 1 ดังนั้น ตัวเลข 1 จึงเรียกว่า set bit ในแง่ของคอมพิวเตอร์
ป้อนข้อมูล − จำนวนเต็ม =50 ซ้าย =2 ขวา =5
ผลผลิต − จำนวนเซตบิตทั้งหมดในช่วงคือ − 2
คำอธิบาย -:การแสดงเลขฐานสองของตัวเลข 50 คือ 110010 และเรามีช่วงเริ่มต้นจากซ้าย =2 ซึ่งมีบิตเป็น 1 และสิ้นสุดที่ด้านขวา =5 ซึ่งมีบิต 1 และอยู่ระหว่างช่วงที่เรามีเพียง 0 เท่านั้น นับเป็น 2
ป้อนข้อมูล − จำนวนเต็ม =42 ซ้าย =3 ขวา 4
ผลผลิต − จำนวนเซตบิตทั้งหมดในช่วงคือ − 1
คำอธิบาย − การแสดงเลขฐานสองของหมายเลข 42 คือ 101010 และเรามีช่วงเริ่มต้นจากซ้าย =3 ซึ่งมีบิตเป็น 1 และสิ้นสุดที่ด้านขวา =4 ซึ่งมีบิต 0 และอยู่ระหว่างช่วง เรามีตัวเลขเพียงหลักเดียว นับเป็น 1
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
ป้อนตัวเลขในตัวแปรประเภทจำนวนเต็มและช่วงที่มีค่าจำนวนเต็มซ้ายและขวาด้วย
-
ประกาศการนับตัวแปรเพื่อเก็บจำนวนชุดบิตของประเภท unsigned int
-
เริ่มวนซ้ำ FOR จาก i ถึง 1<<7 และ i> 0 และ i ถึง i / 2
-
ภายในลูป ตรวจสอบ num &1 ==TRUE แล้วพิมพ์ 1 อื่น ๆ พิมพ์ 0
-
เริ่มวนรอบในขณะที่คำนวณจำนวนบิตทั้งหมดจนถึงจำนวนไม่ใช่ 0
-
ภายในลูป set count =count + number &1 และ set number>>=1
-
สมมติว่าตัวแปรชั่วคราว a with ((1 <
-
ตั้งค่าการนับด้วยการนับ &a
-
พิมพ์จำนวน
ตัวอย่าง
#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;
} ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
8-bit digits of 42 is: 00101010 Count of total set bits in a range are: 2