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

Đếm số bit đã thay đổi sau khi thêm 1 vào N đã cho trong C ++

Chúng tôi được cung cấp một số, giả sử là num và nhiệm vụ là tính tổng số bit đã thay đổi khi 1 được thêm vào một số.

Biểu diễn nhị phân của một số được thực hiện bằng cách chuyển đổi số đã cho thành dạng 0 và 1 và nó được thực hiện bằng nhiều phương pháp khác nhau. Trong một phương pháp, chúng tôi tính toán LCM của một số nhất định bằng 2 và nếu một lời nhắc khác 0 thì bit được đặt thành 1, còn lại bit sẽ được đặt thành 0.

Bảng bổ sung cho các bit là

0 + 1 = 1
1 + 0 = 1
0 + 0 = 0
1 + 1 = 1 ( 1 bit carry)

Ví dụ

Input − num = 10
Output − count is : 1

Giải thích - biểu diễn nhị phân của 10 là 1010 và khi 1 được thêm vào thì biểu diễn sẽ trở thành 1011. Rõ ràng là chỉ có một bit bị thay đổi do đó số đếm là 1.

Input − num = 5
Output − count is : 2

Giải thích - biểu diễn nhị phân của 5 là 101 và khi 1 được thêm vào thì biểu diễn sẽ trở thành 110. Rõ ràng là hai bit đã bị thay đổi do đó số lượng là 2

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ố kiểu số nguyên, giả sử, int num

  • Khai báo một biến sẽ lưu trữ số lượng, giả sử là số lượng int

  • Lấy một biến khác, giả sử tạm thời sẽ tính toán XOR của num và đặt nó thành n ^ (n + 1)

  • Trong lệnh gọi biến đếm __builtin_popcount (tạm thời). Chức năng này là để tính toán số lượng các số trong một biểu diễn nhị phân số nguyên nhất định. Đây là một chức năng có sẵn của trình biên dịch GCC.

  • Trả lại số lượng

  • In kết quả.

Ví dụ

#include <iostream>
using namespace std;
// Function to find number of changed bit
int changedbit(int n){
   int XOR = n ^ (n + 1);
   // Count set bits in xor value
   int count = __builtin_popcount(XOR);
   return count;
}
int main(){
   int n = 10;
   cout <<"count is: " <<changedbit(n);
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, chúng ta sẽ nhận được kết quả sau -

Số lượng
count is: 1