Toán tử bit trong JavaScript

Toán tử bit trong JavaScript

Toán tử Tên Mô tả
& AND Nếu cả hai bit đều là 1 thì đặt mỗi bit là 1
| OR Nếu một trong hai bit là 1 thì đặt mỗi bit là 1
^ XOR Nếu hai bit chỉ có một là 1 thì đặt mỗi bit là 1
~ NOT Đảo ngược tất cả các bit
<< Đặt số không vào trái Bằng cách đẩy số không từ phải vào trái và làm rơi bit bên trái nhất.
>> Đảo ngược dấu Bằng cách đẩy bản sao của bit trái nhất vào phải và làm rơi bit bên phải nhất.
>>> Đặt số không vào phải Bằng cách đẩy số không từ trái vào phải và làm rơi bit bên phải nhất.

Mô hình

Hành động Kết quả tương đương Kết quả
5 & 1 1 0101 & 0001 0001
5 | 1 5 0101 | 0001 0101
5 ^ 1 4 0101 ^ 0001 0100
~ 5 10 ~0101 1010
5 << 1 10 0101 << 1 1010
5 >> 1 2 0101 >> 1 0010
5 >>> 1 2 0101 >>> 1 0010

JavaScript sử dụng số bit toán tử 32 bit

JavaScript lưu trữ số dưới dạng số thập phân 64 bit, nhưng tất cả các phép toán bit đều thực hiện bằng số bát phân 32 bit.

Trước khi thực hiện phép toán bit, JavaScript sẽ chuyển đổi số thành số nguyên có dấu 32 bit.

Sau khi thực hiện phép toán bit, kết quả sẽ được chuyển đổi lại thành số JavaScript 64 bit.

Ví dụ trên sử dụng số bát phân vô dấu 4 bit. Do đó ~5 trả về 10.

Do JavaScript sử dụng số nguyên có dấu 32 bit, JavaScript sẽ trả về -6.

00000000000000000000000000000101 (5)

11111111111111111111111111111010 (~5 = -6)

Số nguyên có dấu sử dụng bit trái nhất làm dấu âm.

Toán tử bit AND

Khi thực hiện toán tử bit AND trên một cặp số bit, nếu tất cả các số bit đều là 1 thì trả về 1.

Ví dụ đơn vị:

Toán tử Kết quả
0 & 0 0
0 & 1 0
1 & 0 0
1 & 1 1

Ví dụ bốn bit:

Toán tử Kết quả
1111 & 0000 0000
1111 & 0001 0001
1111 & 0010 0010
1111 & 0100 0100

Toán tử bit OR

Khi thực hiện toán tử bit OR trên một cặp số bit, nếu một trong hai số là 1 thì trả về 1:

Ví dụ đơn vị

Toán tử Kết quả
0 | 0 0
0 | 1 1
1 | 0 1
1 | 1 1

Toán tử bốn bit:

Hành động Kết quả
1111 | 0000 1111
1111 | 0001 1111
1111 | 0010 1111
1111 | 0100 1111

Toán tử bit XOR

Khi thực hiện toán tử bit XOR trên một cặp số bit, nếu số bit khác nhau thì trả về 1:

Ví dụ đơn vị:

Toán tử Kết quả
0 ^ 0 0
0 ^ 1 1
1 ^ 0 1
1 ^ 1 0

Ví dụ bốn bit:

Toán tử Kết quả
1111 ^ 0000 1111
1111 ^ 0001 1110
1111 ^ 0010 1101
1111 ^ 0100 1011

JavaScript toán tử bit AND (&)

Nếu tất cả các bit đều là 1, toán tử bit AND sẽ trả về 1:

Decimal Binary
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 & 1 00000000000000000000000000000001 (1)

Mô hình

var x = 5 & 1;

Thử ngay

JavaScript toán tử bit OR (|)

Nếu một trong số bit là 1, phép toán OR trả về 1:

Decimal Binary
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 | 1 00000000000000000000000000000101 (5)

Mô hình

var x = 5 | 1;

Thử ngay

Phép toán XOR (^) trong phép toán bit của JavaScript

Nếu số bit khác nhau, phép XOR trả về 1:

Decimal Binary
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 ^ 1 00000000000000000000000000000100 (4)

Mô hình

var x = 5 ^ 1;

Thử ngay

Phép toán NOT (~) trong phép toán bit của JavaScript

Decimal Binary
5 00000000000000000000000000000101
~5 11111111111111111111111111111010 (-6)

Mô hình

var x = ~5;

Thử ngay

Di chuyển trái (<<), lấp đầy bằng số không trong phép toán bit trong JavaScript

Đây là di chuyển trái được lấp đầy bằng số không. Một hoặc nhiều số không từ bên phải được đẩy vào, số bit bên trái nhất được loại bỏ:

Decimal Binary
5 00000000000000000000000000000101
5 << 1 00000000000000000000000000001010 (10)

Mô hình

var x = 5 << 1;

Thử ngay

Di chuyển phải (>>), giữ dấu trong phép toán bit trong JavaScript

Đây là di chuyển phải giữ dấu. Số bit bên trái nhất được đẩy vào từ bên trái, số bit bên phải nhất được di chuyển ra:

Decimal Binary
-5 11111111111111111111111111111011
-5 >> 1 11111111111111111111111111111101 (-3)

Mô hình

var x = -5 >> 1;

Thử ngay

Di chuyển phải (>>>), lấp đầy bằng số không trong JavaScript

Đây là di chuyển phải được lấp đầy bằng số không. Một hoặc nhiều số không từ bên trái được đẩy vào, số bit bên phải nhất được di chuyển ra:

Decimal Binary
5 00000000000000000000000000000101
5 >>> 1 00000000000000000000000000000010 (2)

Mô hình

var x = 5 >>> 1;

Thử ngay

Số nguyên có dấu 32-bit (số binary)

Việc chỉ thiết lập một bit trong số nguyên 32-bit rất dễ hiểu:

Biểu diễn nhị phân Giá trị thập phân
00000000000000000000000000000001 1
00000000000000000000000000000010 2
00000000000000000000000000000100 4
00000000000000000000000000001000 8
00000000000000000000000000010000 16
00000000000000000000000000100000 32
00000000000000000000000001000000 64

Cài đặt thêm một số số vị để tiết lộ mẫu nhị phân:

Biểu diễn nhị phân Giá trị thập phân
00000000000000000000000000000101 5 (4 + 1)
00000000000000000000000000101000 40 (32 + 8)
00000000000000000000000000101101 45 (32 + 8 + 4 + 1)

Số âm là mã bổ sung của số dương thêm 1:

Biểu diễn nhị phân Giá trị thập phân
00000000000000000000000000000101 5
11111111111111111111111111111011 -5
00000000000000000000000000101000 40
11111111111111111111111111011000 -40
11111111111111111111111111011001 -41

Chuyển đổi từ hệ thập phân sang hệ nhị phân

Mô hình

function dec2bin(dec){
    return (dec >>> 0).toString(2);
}

Thử ngay

Chuyển đổi từ hệ nhị phân sang hệ thập phân

Mô hình

function bin2dec(bin){
    return parseInt(bin, 2).toString(10);
}

Thử ngay