Các phép tính Bitwise trong JavaScript
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 ...
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);
}
- Học lập trình front-end cơ bản với bootstrap 4/html5/css3
- Học lập trình front-end nâng cao qua Project thực tế
- Học thiết kế web với Photoshop, CSS theo kiểu SASS
- Học cách sử dụng Git_hub cho lập trình viên
- Học lập trình Back-end PHP theo mô hình MVC cơ bản
- Học lập trình Back-end PHP theo mô hình MVC nâng cao
- Học lập trình Cơ sở dữ liệu với AngularJS
- Học lập trình theme wordpress. Làm ra mọi website hoàn chỉnh với wordpress
- Combo lập trình front-end từ cơ bản – nâng cao
- Combo lập trình back-end từ cơ bản đến nâng cao
- Combo lập trình web với word press từ A-Z