Hướng dẫn lập trình C trên Linux Phần 14 - Các ví dụ thực tế về toán tử bitwise

theanh

Administrator
Nhân viên
Trong một trong những bài viết trước, chúng tôi đã thảo luận về những điều cơ bản của toán tử bitwise. Tôi hy vọng bạn đã đọc qua bài viết đó và giờ đã sẵn sàng để chứng kiến và hiểu một số ví dụ sử dụng thực tế của các toán tử này. Vì vậy, không cần phải nói thêm nữa, chúng ta hãy bắt đầu.

1. Hoán đổi giá trị của hai biến​

Tôi chắc rằng bạn đã biết về logic hoán đổi giá trị của hai biến. Nó bao gồm việc lấy một biến thứ ba để lưu trữ tạm thời một giá trị và sau đó gán giá trị đó cho một trong các biến (có giá trị ban đầu đã được gán cho biến kia).

Ví dụ, nếu 'a' và 'b' là các biến có giá trị cần được hoán đổi và 'c' là biến tạm thời, thì logic chuẩn sẽ diễn ra như sau:
Mã:
c = a;
a = b;
b = c;
Nhưng bạn có biết toàn bộ quá trình hoán đổi này có thể được thực hiện thông qua các toán tử bitwise không? Đúng vậy, và logic, trong trường hợp đó, thậm chí không yêu cầu biến thứ ba. Đây là mã:
Mã:
#include 

int main()
{
 int a, b;
 
 printf("Nhập số đầu tiên: ");
 scanf("%d", &a);
 
 printf("Nhập số thứ hai: ");
 scanf("%d", &b);
 
 printf("Theo đầu vào của bạn, a = %d và b = %d", a,b);
 
 a = a ^ b;
 b = a ^ b;
 a = a ^ b;
 
 printf("\nSau khi hoán đổi, a = %d và b = %d", a,b);


 return 0;
}
Đây là đầu ra:
Mã:
Nhập số đầu tiên: 7 
Nhập số thứ hai: 2 
Theo đầu vào của bạn, a = 7 và b = 2 
Sau khi hoán đổi, a = 2 và b = 7

2. Kiểm tra số lượng nhị phân '1' trong một số​

Đôi khi bạn có thể thấy mình trong tình huống cần đếm số bit được đặt thành '1' trong một số. Bạn sẽ vui mừng khi biết rằng bạn có thể dễ dàng thực hiện việc này bằng cách sử dụng các toán tử bitwise. Đây là logic:
Mã:
#include 

int main()
{
 int a, num_of_bits = 0;
 
 printf("Nhập số: ");
 scanf("%d", &a);

 while(a)
 {
 if(a & 1)
 num_of_bits++;
 
 a = a >> 1;
 }
 
 printf("\nSố lượng bit nhị phân 1 trong số này là %d", num_of_bits);
 
 return 0;
}
Đây là kết quả đầu ra:
Mã:
Nhập một số: 5 
 
Số lượng bit nhị phân 1 trong số này là 2

3. Chương trình C để kiểm tra xem vị trí bit đã cho có phải là 1 hay không​

Đôi khi, đặc biệt là khi làm việc trên mã liên quan đến mạng máy tính (giao thức, v.v.), bạn được yêu cầu kiểm tra xem vị trí bit cụ thể có được đặt thành 1 hay không. Điều này có thể dễ dàng thực hiện bằng cách sử dụng các toán tử bitwise.

Đây là mã:
Mã:
#include 

int main()
{
 int num, position, temp;
 
 printf("Nhập một số: ");
 scanf("%d", &num);
 
 printf("Nhập vị trí bit (giữ nguyên số 0 làm chỉ số cơ sở và số 31 làm số tối đa): ");
 scanf("%d", &position);

 if(((num>>position)&1) == 1)
 printf("\nBit tại vị trí là 1");
 else
 printf("\nBit tại vị trí là 0");
 
 return 0;
}
Đây là đầu ra:
Mã:
Nhập một số: 2 
Nhập vị trí bit (giữ nguyên số 0 làm chỉ số cơ sở và 31 làm số tối đa): 3 
 
Bit ở vị trí là 0
4. Chuyển đổi số thập phân sang dạng nhị phân của nó

Các toán tử bitwise cũng có thể được sử dụng để chuyển đổi số thập phân sang dạng nhị phân của nó. Sau đây là một logic cho nó:
Mã:
#include 

int main()
{
 int num, i = 0, temp = 0;
 int bin[32] = {0}; // lệnh này sẽ khởi tạo tất cả các phần tử mảng thành 0

 /* Nhập số từ người dùng */
 printf("Nhập bất kỳ số nào: ");
 scanf("%d", &num);

 for(i =31; i>=0; i--)
 {
 if((num & 1) == 1)
 {
 bin[i] = 1;
 
 num = num>>1;
 }

 printf("Dạng nhị phân của số bạn nhập là: ");
 
 for(i=0; i
 
Back
Bên trên