Làm thế nào để bạn tìm thấy nếu một số là lũy thừa của 2 bằng cách sử dụng bitwise?

Đây là mã nguồn của Chương trình C để kiểm tra xem một số nguyên đã cho có phải là lũy thừa của 2 hay không bằng cách sử dụng toán tử bitwise. Chương trình C được biên dịch thành công và chạy trên hệ thống Linux. Đầu ra chương trình cũng được hiển thị bên dưới

/*
 * C Program to Check if a given Integer is Power of 2 using Bitwise Operators
 */
#include 
#define NUM_BITS_INT [8*sizeof[int]]
 
int power_of_2[unsigned int];
 
int main[]
{
    unsigned int num;
 
    printf["\nEnter Number"];
    scanf["%d", &num];
    power_of_2[num];
}
 
/*
 * Finding the power of 2 using bit wise operators
 */ 
int power_of_2[unsigned int x]
{
    int i, count = 0, result, shift_num;
 
    for [i = 0;i > i;
        result = shift_num & 1;
        if [result == 1]
            count++;
    }
    /*
     *If number of bits set to 1 are odd then the number is power of 2
     *If number of bits set to 0 are even then the number is not power of 2
     */
    if [count % 2 == 1]
        printf["YES"];
    else 
        printf["NO"];
}

Giải thích chương trình

Trong Chương trình C này, chúng tôi đang đọc số bằng cách sử dụng biến 'num'. Hàm power_of_2[] được sử dụng để tìm lũy thừa của 2 bằng cách sử dụng các toán tử khôn ngoan. Toán tử dịch phải nhị phân, giá trị toán hạng bên trái được di chuyển sang phải theo số bit được chỉ định bởi toán hạng bên phải và gán giá trị cho biến 'shift_num'

Ghi chú. Tham gia các lớp học Sanfoundry miễn phí tại Telegram hoặc Youtube

quảng cáo

quảng cáo

Biến 'kết quả' được sử dụng để tính toán phép toán AND nhị phân bằng cách sao chép một bit vào kết quả nếu nó tồn tại trong cả hai toán hạng. Nếu câu lệnh điều kiện được sử dụng để kiểm tra giá trị của biến 'res' bằng 1. Nếu điều kiện đúng thì thực hiện câu lệnh và tăng giá trị của biến 'count'

Câu lệnh điều kiện if else được sử dụng để kiểm tra xem số bit được đặt thành 1 có phải là số lẻ không và in ra số đó là lũy thừa của 2. Ngược lại, nếu điều kiện sai và in ra số không phải lũy thừa của 2 và hiển thị kết quả của chương trình

Về cơ bản, chúng tôi đang kiểm tra xem số & [số - 1] có bằng 0 không thì số đó là lũy thừa của hai. Chúng tôi đang thực hiện hai thao tác trong mã này, thao tác đầu tiên là phép trừ nhị phân và thao tác thứ hai là thao tác AND theo bit


Trước tiên chúng ta hãy xem toán tử AND hoạt động như thế nào. Như tên gợi ý, nó thực hiện thao tác AND trên từng bit của cả hai toán hạng, theo bit, AND sẽ chỉ trả về 0 nếu cả hai toán hạng không có bit được đặt [1] tại cùng một vị trí.  

  • Viết chương trình trong C để tìm xem một số có phải là lũy thừa của hai hay không trên một dòng
  • Cách tìm xem một số có phải là lũy thừa của hai hay không

  • Bất kỳ số nào là lũy thừa của hai [hãy để nó là AND] chỉ có một bit được đặt trong biểu diễn nhị phân của nó.
    Ví dụ. 4 = 100, 8 = 1000, 16 = 10000, 32 = 100000, v.v.
  • Nếu chúng ta trừ 1 từ bất kỳ lũy thừa nào của 2 số thì bit thiết lập sẽ không được đặt và tất cả các bit ở bên phải của bit được đặt ban đầu trở thành 1.
    Ví dụ. 4-1 = 011, 8-1 = 0111, 16-1 = 01111, 32-1=011111
  • Bây giờ, nếu theo chiều bit và[&] của N và N-1 trả về ] có nghĩa là N là lũy thừa của 2.
    Ví dụ: 4 & 3 = 100 & 011 = 000

Chương trình C để kiểm tra xem một số có phải là lũy thừa của hai hay không bằng toán tử bitwise

#include
#include

int main[] {
    int num;
    
    printf["Enter an integer\n"];
    scanf["%d", &num];
    
    if[num && [[num & [num-1]] == 0]]{
        printf["%d is power of 2", num];
    } else {
        printf["%d is not a power of 2", num];
    }

    return 0;
}

Đầu ra
Enter an integer
16
16 is power of 2
Enter an integer
15
16 is not a power of 2

Làm cách nào để tìm sức mạnh của 2 trong C bằng toán tử bitwise?

Trong Chương trình C này, chúng tôi đang đọc số bằng cách sử dụng biến 'num'. Hàm power_of_2[] được sử dụng để tìm lũy thừa của 2 bằng cách sử dụng toán tử thông minh bit. Toán tử dịch phải nhị phân giá trị toán hạng bên trái được di chuyển sang phải theo số bit được chỉ định bởi toán hạng bên phải và gán giá trị cho biến 'shift_num'.

Toán tử Bitwise nào được sử dụng để chia một số cho 2?

The Toán tử dịch chuyển phải theo bit . e. mỗi khi chúng ta dịch chuyển một số về bên phải 1 bit, nó sẽ chia số đó cho 2.

Chủ Đề