Các phép tính Bitwise trong JavaScript - Fedu

CHÀO MỪNG BẠN ĐẾN VỚI THƯ VIỆN HỌC TẬP & ĐÀO TẠO CƠ BẢN

Các phép tính Bitwise trong JavaScript

JavaScript

Hướng dẫn JavaScript

Biểu mẫu JavaScript

Đối tượng JavaScript

Hàm JavaScript

DOM JavaScript

Trình duyệt BOM

JavaScript Ajax

JavaScript Json

Các phép tính Bitwise

Toán tử Tên Mô tả
& AND Thực hiện một phép toán AND logic trên mỗi bit của các tham số integer
| OR Thực hiện một phép toán OR logic trên mỗi bit của các tham số integer
^ XOR Thực hiện một phép toán OR loại trừ logic trên mỗi bit của các tham số integer
~ NOT Toán tử một ngôi và thực hiện đảo ngược tất cả các bit trong toán hạng đó
<< Zero fill left shift Di chuyển tất cả các bit trong toán hạng đầu tiên sang trái với số vị trí được xác định trong toán hạng thứ hai. Các bit mới được làm đầy bởi số 0. Chuyển dịch một giá trị sang trái một vị trí tương đương với nhân nó với 2, chuyển dịch 2 vị trí tương đương với nhân với 4, và cứ như vậy.
>> Signed right shift Toán tử dịch phải nhị phân. Giá trị của toán hạng trái được di chuyển sang phải bởi số các bit được xác định bởi toán hạng phải.
>>> Zero fill right shift Toán tử này khá giống với toán tử >>, ngoại trừ ở chỗ các bit được dịch chuyển sang trái luôn luôn là số 0.

Ví dụ:

Toán tử Kết quả Tương đương Kết quả
5 & 1 1 0101 & 0001  0001
5 | 1 5 0101 | 0001  0101
~ 5 10  ~0101  1010
5 << 1 10 0101 << 1  1010
5 ^ 1 4 0101 ^ 0001  0100
5 >> 1 2 0101 >> 1  0010
5 >>> 1 2 0101 >>> 1  0010

Sử dụng toán hạng Bitwise 32 bits trong JavaScript

JavaScript lưu số là số dấu chấm động 64 bit, nhưng tất cả các hoạt động bitwise được thực hiện trên số nhị phân 32 bit. Trước khi một thao tác bitwise được thực hiện, JavaScript chuyển đổi số thành số nguyên có dấu 32 bit. Sau khi hoạt động bitwise được thực hiện, kết quả sẽ được chuyển đổi lại thành các số 64 bit.

Các ví dụ trên sử dụng số nhị phân 4 bit không dấu. Bởi vì ~5 trả về 10. Vì JavaScript sử dụng số nguyên 32 bit có dấu, JavaScript sẽ trả về -6.

00000000000000000000000000000101 (5)

11111111111111111111111111111010 (~5 = -6)

Một số nguyên có dấu sử dụng bit trái là dấu trừ.

Bitwise AND

Khi một bitwise AND được thực hiện trên một cặp bit, nó sẽ trả về 1 nếu cả hai bit là 1.

Ví dụ 1 bit:

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

Ví dụ 4 bits:

Toán tử Kết quả
1111 & 0000 0
1111 & 0001 1
1111 & 0010 10
1111 & 0100 100

Bitwise OR

Khi một bitwise OR được thực hiện trên một cặp bit, nó trả về 1 nếu một trong các bit là 1:

Ví dụ 1 bit:

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

Ví dụ 4 bit:

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

Bitwise XOR

Khi một bitwise XOR được thực hiện trên một cặp bit, nó sẽ trả về 1 nếu các bit là khác nhau:

Ví dụ 1 bit:

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

Ví dụ 4 bit:

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

JavaScript Bitwise AND (&)

Bitwise AND trả về 1 chỉ khi cả hai bit là 1:

Thập phân Nhị phân
5 101
1 1
5 & 1 00000000000000000000000000000001 (1)

Ví dụ:

var x = 5 & 1;

JavaScript Bitwise OR (|)

Bitwise OR trả về 1 nếu một trong các bit là 1:

Thập phân Nhị phân
5 101
1 1
5 | 1 00000000000000000000000000000101 (5)

Ví dụ:

var x = 5 | 1;

JavaScript Bitwise XOR (^)

Bitwise XOR trả về 1 nếu các bit là khác nhau:

Thập phân Nhị phân
5 101
1 1
5 ^ 1 00000000000000000000000000000100 (4)

Ví dụ:

var x = 5 ^ 1;

JavaScript Bitwise NOT (~)

Thập phân Nhị phân
5 00000000000000000000000000000101
~5 11111111111111111111111111111010 (-6)

Ví dụ:

var x = ~5;

Bitwise Left Shift (<<)

Thập phân Nhị phân
5  00000000000000000000000000000101
5 << 1  00000000000000000000000000001010 (10)

Ví dụ:

var x = 5 << 1;

Bitwise Right Shift (>>)

Thập phân Nhị phân
-5  11111111111111111111111111111011
-5 >> 1  11111111111111111111111111111101 (-3)

Ví dụ:

var x = -5 >> 1;

Right Shift (>>>)

Thập phân Nhị phân
5  00000000000000000000000000000101
5 >>> 1  00000000000000000000000000000010 (2)

Ví dụ:

var x = 5 >>> 1;

Số nhị phân

Số nhị phân chỉ có một bộ bit dễ hiểu:

Đại 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

Đặt một vài bit mô hình nhị phân:

Đại diện nhị phân Giá trị thập phân
 00000000000000000000000000000101  5 (4 + 1)
00000000000000000000000000001101  13 (8 + 4 + 1)
 00000000000000000000000000101101  45 (32 + 8 + 4 + 1)

Các số nhị phân JavaScript được lưu trữ dưới dạng bổ sung của hai. Điều này có nghĩa là một số âm là bit KHÔNG của số cộng 1:

Đại diện nhị phân Giá trị thập phân
 00000000000000000000000000000101  5
 11111111111111111111111111111011  -5
 00000000000000000000000000000110  6
 11111111111111111111111111111010  -6
 00000000000000000000000000101000  40
 11111111111111111111111111011000  -40

Chuyển đổi thập phân sang nhị phân

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

Chuyển đổi nhị phân sang thập phân

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