Helpex - Trao đổi & giúp đỡ Đăng nhập

Cách thực hiện thao tác bit trong JavaScript

Các phép toán bitwise không phổ biến lắm trong JavaScript, nhưng đôi khi chúng không thể thiếu.

Để hiểu cách hoạt động của các phép toán bit trong JavaScript, trước tiên bạn cần phải hiểu hệ thống nhị phân là gì và cách chuyển đổi các số từ thập phân sang nhị phân và ngược lại.

Có thể tìm thấy phần giới thiệu về hệ thống số nhị phân tại đây .

Đánh giá rộng về tất cả các toán tử Bitwise trong JS

Nhà điều hành Tên gọi chung Sự miêu tả
& Nếu cả hai bit là 1 - kết quả là 1. Nếu ít nhất một trong số chúng là 0 - kết quả là 0.
| HOẶC LÀ Nếu cả hai bit là 0 - kết quả là 0. Nếu ít nhất một trong số chúng là 1 - kết quả là 1.
^ XOR Nếu cả hai bit giống nhau - kết quả là 0. Nếu các bit khác nhau - kết quả là 1.
~ KHÔNG PHẢI Đảo ngược tất cả các bit trong một số.
<< Dịch trái Dịch chuyển tất cả các bit sang trái, lấp đầy các vị trí trống bằng các số không.
>> Đã ký đúng ca Dịch chuyển tất cả các bit sang phải, lấp đầy các khe trống bằng bit ngoài cùng bên trái, để duy trì dấu hiệu của số.
>>> Dịch chuyển bên phải không dấu Dịch chuyển tất cả các bit sang phải, lấp đầy các vị trí trống bằng các số không.

Ví dụ và cách sử dụng

Các toán tử bitwise trong JavaScript khá khó hiểu nếu bạn áp dụng chúng cho các số thập phân.

Tôi khuyên bạn nên bắt đầu với một mảnh giấy và một cây bút chì và viết ra tất cả các số trong hệ nhị phân.

Toán tử AND, OR, XOR

Các nhà khai thác &, |^yêu cầu hai con số để hoạt động đúng. Họ so sánh từng bit trong những con số này, áp dụng các quy tắc từ bảng trên.

Hãy thử chúng ra. Biểu diễn nhị phân của một số thập phân có trong nhận xét:

const x = 5;   // 0101
const y = 6;   // 0110

Sẽ dễ dàng hơn nếu bạn viết các số nhị phân lần lượt dưới số kia như thế này:

AND 0101     OR 0101     XOR 0101<font>
    0110        0110         0110<font>
    ----        ----         ----<font>
    0100        0111         0011<font>
</font></font></font></font>

Bây giờ, chúng tôi có thể thêm console.logvà xem liệu các tính toán của chúng tôi có đúng hay không:

console.log(x & y);  // 4
console.log(x || y); // 7
console.log(x ^ y);  // 3

Một mẹo quan trọng với XOR là nếu bạn đặt cùng một số ở cả hai mặt của nó, bạn sẽ luôn nhận được số không.

console.log(x ^ x);  // 0
console.log(y ^ y);  // 0

Ngược lại, nếu bạn thay thế ^bằng một trong hai &hoặc |số đó sẽ không thay đổi.

Nhà điều hành KHÔNG PHẢI

Người ~điều hành là một con thú khác. Nó được gọi là toán tử một ngôi vì nó áp dụng cho một toán hạng đơn (số).

NOT 0101 => 1010<font>
NOT 0110 => 1001<font>
</font></font>
console.log(~x);     // -6
console.log(~y);     // -7

Dấu hiệu bị lật khi nó được xác định bởi bit ngoài cùng bên trái trong một số JavaScript. Nếu được đặt thành 0, số là dương, nếu được đặt 1là số âm.

Nếu bạn áp dụng ~nhà điều hành số hai lần, bạn sẽ quay lại nơi bạn đã bắt đầu:

console.log(~~x);     // 5

Toán tử dịch chuyển bit

Sự dịch chuyển theo chiều bit cần có hai số để chạy. Số đầu tiên là số thực tế đang được chuyển và số thứ hai là số chữ số nhị phân cần được di chuyển.

Dịch trái

Chuyển số nhị phân một chữ số sang trái cũng giống như việc làm cho nó lớn hơn hai lần. Trừ khi nó đã lớn đến mức không còn bit nào để chứa kết quả của một phép nhân như vậy.

console.log(x << 1);   // 10
console.log(y << 2);   // 24

Chuyển sang phải

Sự dịch chuyển bên phải, ngược lại với sự dịch chuyển bên trái, làm cho số nhỏ hơn. Nếu số lượng đủ lớn và không có bit quan trọng nào bị "rơi ra", nó sẽ chia số đó cho hai. Trong trường hợp của chúng tôi, với số lượng nhỏ, nó không dễ dàng như vậy:

console.log(x >> 1);   // 2
console.log(y >> 2);   // 1

Đừng lười biếng, hãy tự mình kiểm tra phép tính nhị phân!

Dịch chuyển sang phải không dấu

Sự chuyển dịch bên phải không có dấu khác với sự dịch chuyển bên phải thông thường, vì nó không duy trì dấu hiệu của số. Khi áp dụng cho các số âm, nó sẽ luôn chuyển chúng thành dương khi bit ngoài cùng bên trái sẽ trở thành 0.

const n = 100;   
const m = -100;

console.log(n >>> 2);   // 25
console.log(m >>> 2);   // 1073741799

Không có bất ngờ với 100và nó dự kiến ​​sẽ 4nhỏ hơn lần.

Nhưng bạn có hiểu tại sao -100lại biến thành 1073741799không?

Phần kết luận

Nếu bạn đang phát triển web bằng JavaScript thì rất có thể bạn sẽ không bao giờ phải sử dụng toán tử bitwise trong các công việc hàng ngày của mình.

Tuy nhiên, một số người phỏng vấn rất thích chủ đề này và có thể yêu cầu bạn thực hiện một số nhiệm vụ chỉ bằng các thao tác bitwise. Ví dụ, xác định xem số đó có chẵn không.

Nếu bạn đang muốn chuẩn bị cho cuộc phỏng vấn kỹ thuật, bạn có thể thấy ứng dụng của tôi, Coderslang, rất hữu ích. Nó có hơn 1.500 câu hỏi bằng JavaScript, HTML / CSS, Java, C #, Node.js, React.js, React Native và QA.

Tải xuống trên iOS hoặc Android .

9 hữu ích 0 bình luận 8.4k xem chia sẻ

Có thể bạn quan tâm

loading