Menu
CoddyTech

Toán tử AND

Bài học 5 trên 17 trong khóa học Thao tác bit của Coddy.

Toán tử AND ( &)

AND theo bit là toán tử nhị phân hoạt động trên hai mẫu bit có độ dài bằng nhau. Nếu cả hai bit ở vị trí được so sánh trong các mẫu bit đều là 1, bit trong mẫu bit kết quả sẽ là 1, nếu không sẽ là 0.  Ký hiệu '&' biểu thị toán tử AND.

Bảng bên dưới cho thấy phép toán AND trên hai bit.

x0011
y0101
x & y0001

Hãy xem một ví dụ để hiểu rõ hơn về phép toán AND.

Trong ví dụ trên, chúng ta đã thực hiện phép toán AND trên (11)10 và (6)10 , kết quả là (2)10. Chúng ta chỉ cần viết các số này ở dạng nhị phân rồi so sánh hai bit. Nếu có bit nào bằng 0, chúng ta đưa 0 vào mẫu bit kết quả.

Cách dùng:

int a = 1;
int b = 0;
>> a & b
OUTPUT: 0
challenge icon

Thử thách

Dễ

Tim phát hiện một số viên đá có ghi các con số trên đó trong một hang động khi đang đi bộ đường dài. Tất cả viên đá được xếp thành một dãy. Gần những viên đá ấy, cậu phát hiện một cuốn nhật ký thần bí cho biết những viên đá này có phép thuật và nêu một số điều kiện để chúng có thể thực hiện phép thuật. Đó là:

  1. Các viên đá phép thuật xuất hiện thành từng nhóm 2 viên.
  2. Các viên đá phải được chọn theo thứ tự liên tiếp và nhóm không được chứa viên đá đã chọn trước đó. 
  3. Điều kiện thứ ba không đọc được. Vì vậy, Tim thử nghiệm với những viên đá và phát hiện ra rằng phép thuật chỉ được thực hiện khi phép toán AND áp dụng lên các con số trong nhóm cho kết quả bằng không.

Hãy tìm nhóm đã thực hiện phép thuật và xuất ra con số ghi trên viên đá đầu tiên của nhóm. 

Ví dụ, giả sử những viên đá cậu tìm thấy được xếp như sau:

[ 5 , 2 , 3 , 6 , 1 , 9 ]

Trước tiên, Tim chia những viên đá này thành các nhóm 2 viên liên tiếp, không lặp lại. { (5,2) , (3,6) , (1,9) }

Sau đó, cậu thực hiện phép toán AND ( & ) trên các nhóm này và phát hiện nhóm đầu tiên sẽ thực hiện phép thuật. 5=> (101)2 và 2=>(010)2. Chỉ nhóm này trong ba nhóm cho kết quả bằng không khi thực hiện phép toán AND.

Đầu ra sẽ là 5 vì chúng ta cần con số trên viên đá đầu tiên của nhóm để xác định nhóm đó.

Cũng lưu ý rằng tất cả các dãy đều chứa số phần tử chẵn và trong mỗi dãy đã cho luôn có duy nhất một nhóm thực hiện phép thuật. Thử thách của bạn là hoàn thành hàm "MagicStones" để tìm nhóm phép thuật mà Tim phát hiện.

Tự làm thử

#include <iostream>
#include <vector>
using namespace std;

int MagicStones(vector<int> stone_sequence) {
    // Viết code ở đây
}

Tất cả bài học trong Thao tác bit

Tự luyện tập: Trình biên dịch C++ online

Kiểm tra một phép chuyển đổi: Công cụ chuyển đổi hệ cơ số