1. &Toán tử bitwise

Trước đây chúng tôi đã nói rằng tất cả dữ liệu được lưu trữ trong bộ nhớ dưới dạng biểu diễn nhị phân. Vì vậy, cách đây khá lâu, các lập trình viên đã nghĩ ra rất nhiều cách thú vị để làm việc với các số nhị phân. Ví dụ: Java có các toán tử logic hoạt động trên các bit của biểu diễn nhị phân của một số: &(AND), | (OR), ~(KHÔNG hoặc phần bù) và ^(XOR - loại trừ hoặc).

a & b
Toán tử bitwise &(AND)

Toán tử này rất giống với &toán tử logic (AND), chỉ khác là nó được biểu thị bằng một dấu và chứ không phải hai:

Và nó được áp dụng cho các bit riêng lẻ. Mỗi toán hạng được coi là một mảng các bit và ibit thứ của kết quả được tính bằng cách sử dụng ibit thứ của mỗi trong hai toán hạng.

Bit đầu tiên của kết quả sẽ được tính dựa trên bit đầu tiên của số a và bit đầu tiên của số b, bit thứ hai — dựa trên bit thứ hai của số a và bit thứ hai của số b, v.v.

Toán &tử (AND) có nghĩa là "bit kết quả chỉ bằng một nếu bit tương ứng của số abằng một ANDbit tương ứng của số đó bbằng một":

1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0

Ví dụ:

Ví dụ Kết quả
0b0011 & 0b1010
0b0010
0b1111 & 0b0000
0b0000
0b1010 & 0b0101
0b0000
0b1111 & 0b1010
0b1010

2. |Toán tử bitwise

Toán tử này rất giống với |toán tử logic (OR), chỉ khác là nó được biểu thị bằng một đường thẳng đứng chứ không phải hai:

a | b

Và nó được áp dụng cho các bit riêng lẻ. Mỗi toán hạng được coi là một mảng các bit và bit thứ i của kết quả được tính bằng cách sử dụng bit thứ i của mỗi trong hai toán hạng.

Toán tử bitwise |(OR) có nghĩa là "bit kết quả bằng một nếu bit tương ứng của số abằng một ORbit tương ứng của số đó bbằng một":

1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0

Ví dụ:

Ví dụ Kết quả
0b0011 | 0b1010
0b1011
0b1110 | 0b0000
0b1110
0b1010 | 0b0101
0b1111
0b1111 | 0b1010
0b1111

Chỉ khi các bit tương ứng (các bit ở cùng một vị trí) của cả hai số bằng 0 thì bit tương ứng của kết quả mới bằng 0.



3. Toán tử Bitwise ^(XOR hoặc "độc quyền hoặc")

Toán XORtử, cũng được phát âm là độc quyền hoặc , được biểu thị bằng ^ký hiệu. Để nhập nó trên bàn phím, hãy nhấn shift + 6 (trên bố cục bàn phím tiếng Anh).

a ^ b

Toán tử này hơi giống với ORtoán tử, kể cả ở chỗ nó có tên tương tự:XOR

Toán tử bitwise ^(XOR) có nghĩa là "bit kết quả bằng một nếu bit tương ứng của số abằng một ORbit tương ứng của số bbằng một nhưng không phải cả hai cùng một lúc":

1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0

Ví dụ:

Ví dụ Kết quả
0b0011 ^ 0b1010
0b1001
0b1110 ^ 0b0000
0b1110
0b1010 ^ 0b0101
0b1111
0b1111 ^ 0b1010
0b0101

Chỉ khi các bit tương ứng (các bit ở cùng một vị trí) của cả hai số khác nhau thì bit tương ứng của kết quả mới bằng một . Nếu các bit giống nhau , bit kết quả bằng không .



4. Toán tử Bitwise ~(NOT, COMPLEMENT)

Tôi nghĩ rằng bạn đã có thể đoán những gì nó làm. Toán tử này rất giống với !toán tử logic (NOT), nhưng nó được biểu thị bằng dấu ngã , không phải dấu chấm than:

~a

Đây là toán tử một ngôi , có nghĩa là nó áp dụng cho một số duy nhất, không phải hai. Nó xuất hiện trước toán hạng đơn này.

Toán tử bitwise ~có nghĩa là "bit kết quả là một nếu bit tương ứng của số abằng 0 và bằng 0 nếu bit tương ứng của số alà một":

~1 = 0
~0 = 1

Ví dụ:

Ví dụ Kết quả
~0b0011
0b1100
~0b0000
0b1111
~0b0101
0b1010
~0b1111
0b0000

Toán tử này chỉ đơn giản là thay đổi bit thành 10bit 0thành 1.