JavaScript - Bitwise Operators
Xin chào các bạn, những pháp sư lập trình tương lai! Hôm nay, chúng ta sẽ cùng lặn sâu vào thế giới kỳ diệu của các phép toán Bitwise trong JavaScript. Bây giờ tôi biết bạn đang nghĩ gì: "Bitwise gì đó?" Đừng lo lắng! Đến cuối bài học này, bạn sẽ manipulates bits như một chuyên gia. Vậy, hãy cùng bắt đầu cuộc phiêu lưu nhị phân này nhé!
JavaScript Bitwise Operators
Các phép toán Bitwise là những công cụ đặc biệt trong JavaScript cho phép chúng ta làm việc với các số ở mức độ nhị phân. Điều đó có nghĩa là chúng ta đang xử lý với 1 và 0, giống như máy tính nội bộ. Nó có thể听起来 đáng sợ, nhưng tin tôi đi, nó thực sự rất thú vị một khi bạn quen thuộc với nó!
Trước khi chúng ta nhảy vào chi tiết, hãy cùng nhìn qua tất cả các phép toán Bitwise mà chúng ta sẽ thảo luận:
Operator | Name | Description |
---|---|---|
& | AND | Đặt mỗi bit thành 1 nếu cả hai bit đều là 1 |
| | OR | Đặt mỗi bit thành 1 nếu một trong hai bit là 1 |
^ | XOR | Đặt mỗi bit thành 1 nếu chỉ một trong hai bit là 1 |
~ | NOT | Đảo ngược tất cả các bit |
<< | Left Shift | Dịch trái bằng cách đẩy các số không vào từ bên phải |
>> | Right Shift | Dịch phải bằng cách đẩy các bản sao của bit bên trái vào từ bên trái |
>>> | Zero-fill Right Shift | Dịch phải bằng cách đẩy các số không vào từ bên trái |
Bây giờ, hãy phân tích chúng một cái một!
JavaScript Bitwise AND (&) Operator
Phép toán Bitwise AND giống như một người giữ cửa rất nghiêm ngặt tại một câu lạc bộ độc quyền. Nó chỉ cho phép một 1 đi qua nếu cả hai đầu vào đều là 1. Ngược lại, nó là 0. Hãy xem nó trong hành động:
let a = 5; // 0101 trong nhị phân
let b = 3; // 0011 trong nhị phân
console.log(a & b); // 0001 trong nhị phân, tức là 1 trong thập phân
Trong ví dụ này, chúng ta đang so sánh 5 (0101) và 3 (0011) bit bằng bit. Chỉ bit bên phải là 1 trong cả hai số, vì vậy chỉ bit đó là 1 duy nhất đi qua. Kết quả là 0001, tức là 1 trong thập phân.
JavaScript Bitwise OR (|) Operator
Phép toán Bitwise OR giống như một người giữ cửa dễ dãi hơn. Nếu bất kỳ đầu vào nào là 1, nó sẽ để nó qua. Hãy xem cách nó hoạt động:
let a = 5; // 0101 trong nhị phân
let b = 3; // 0011 trong nhị phân
console.log(a | b); // 0111 trong nhị phân, tức là 7 trong thập phân
Tại đây, chúng ta có 1 ở bất kỳ đâu mà hoặc 5 hoặc 3 có một 1, kết quả là 0111, tức là 7 trong thập phân.
JavaScript Bitwise XOR (^) Operator
Phép toán XOR giống như một trò chơi派对 kỳ lạ nơi bạn chỉ được vào nếu bạn đeo mũ hoặc khăn quàng cổ, nhưng không phải cả hai! Nó trả về 1 chỉ khi các bit khác nhau. Kiểm tra này:
let a = 5; // 0101 trong nhị phân
let b = 3; // 0011 trong nhị phân
console.log(a ^ b); // 0110 trong nhị phân, tức là 6 trong thập phân
Chúng ta có 1 ở nơi các bit khác nhau (thứ hai và thứ ba từ phải), kết quả là 0110, tức là 6 trong thập phân.
JavaScript Bitwise NOT (~) Operator
Phép toán NOT giống như ngày đảo ngược - nó đảo ngược tất cả các bit. Nhưng có một catch! Trong JavaScript, nó cũng đảo ngược dấu và trừ đi 1. Hãy xem:
let a = 5; // 0101 trong nhị phân
console.log(~a); // -6 trong thập phân
Kết quả có thể làm bạn ngạc nhiên! Đó là vì JavaScript sử dụng bổ mã hai để biểu diễn số âm. Vậy ~5 thực sự là -6.
Bitwise Left Shift (<<) Operator
Phép toán Left Shift giống như một băng chuyền di chuyển các bit sang trái và thêm các số không vào bên phải. Mỗi dịch chuyển hiệu quả gấp đôi số:
let a = 5; // 0101 trong nhị phân
console.log(a << 1); // 1010 trong nhị phân, tức là 10 trong thập phân
console.log(a << 2); // 10100 trong nhị phân, tức là 20 trong thập phân
Như bạn thấy, 5 trở thành 10 với một dịch chuyển, và 20 với hai dịch chuyển? Nó giống như phép thuật!
Bitwise Right Shift (>>) Operator
Phép toán Right Shift làm ngược lại, dịch các bit sang phải. Nó hiệu quả làm giảm một nửa số ( làm tròn xuống):
let a = 5; // 0101 trong nhị phân
console.log(a >> 1); // 0010 trong nhị phân, tức là 2 trong thập phân
5 chia cho 2 là 2.5, nhưng chúng ta làm tròn xuống thành 2.
Bitwise Right Shift with Zero (>>>) Operator
Phép toán này tương tự như >>, nhưng nó luôn điền số không từ bên trái, ngay cả với số âm:
let a = -5; // 11111111111111111111111111111011 trong nhị phân (32-bit)
console.log(a >>> 1); // 01111111111111111111111111111101 trong nhị phân, tức là 2147483645 trong thập phân
Đây là một chút khó hiểu! Nó chủ yếu được sử dụng khi bạn cần treating một số như unsigned.
Và đó là tất cả, các bạn! Bạn đã chính thức bước vào thế giới của các phép toán bitwise. Các phép toán này có thể trông abstract bây giờ, nhưng chúng rất hữu ích cho các nhiệm vụ như làm việc với dữ liệu nhị phân, tạo hàm băm, hoặc tối ưu hóa một số thuật toán.
Nhớ rằng, thực hành làm nên完美. Hãy thử chơi với các phép toán này, và sớm bạn sẽ bit through bits như một chuyên gia! Chúc các bạn may mắn trong việc lập trình, và may the bits be with you!
Credits: Image by storyset