Hoạt động Bitwise javaScript
Toán tử Bitwise JavaScript
& | AND | Đặt từng 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 |
> | Signed right shift | Dịch sang phải bằng cách đẩy các bit ngoài cùng bên trái vào từ bên trái và để các bit ngoài cùng bên phải rơi ra |
>>> | Zero fill right shift | Dịch sang phải bằng cách đẩy các số không từ bên trái vào và để các bit ngoài cùng bên phải rơi ra |
Các ví dụ
5 & 1 | 1 | 0101 & 0001 | 0001 |
5 | 1 | 5 | 0101 | 0001 | 0101 |
~ 5 | 10 | ~0101 | 1010 |
5 1 | 2 | 0101 >> 1 | 0010 |
5 >>> 1 | 2 | 0101 >>> 1 | 0010 |
JavaScript Sử dụng Toán hạng Bitwise 32 bit
JavaScript lưu trữ các số dưới dạng số dấu chấm động 64 bit, nhưng tất cả các phép toán bit đều được thực hiện trên số nhị phân 32 bit.
Trước khi thực hiện thao tác theo bit, JavaScript sẽ chuyển đổi số thành số nguyên có dấu 32 bit.
Sau khi thao tác bitwise được thực hiện, kết quả được chuyển đổi trở lại các số JavaScript 64 bit.
Vì JavaScript sử dụng số nguyên có dấu 32 bit nên nó sẽ không trả về 10. Nó sẽ trả về -6.
00000000000000000000000000000101 [5]
1111111111111111111111111111111010 [~5 = -6]
Một số nguyên có dấu sử dụng bit ngoài cùng bên trái làm dấu trừ.
Bitwise AND
Khi một bit AND được thực hiện trên một cặp bit, nó sẽ trả về 1 nếu cả hai bit đều là 1.
Ví dụ 1 bit
0 & 0 | 0 |
0 & 1 | 0 |
1 & 0 | 0 |
1 & 1 | 1 |
Ví dụ 4 bit
1111 & 0000 | 0000 |
1111 & 0001 | 0001 |
1111 & 0010 | 0010 |
1111 & 0100 | 0100 |
Khi một bit OR được thực hiện trên một cặp bit, nó sẽ trả về 1 nếu một trong các bit là 1.
Ví dụ 1 bit
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Ví dụ 4 bit
1111 | 0000 | 1111 |
1111 | 0001 | 1111 |
1111 | 0010 | 1111 |
1111 | 0100 | 1111 |
Bitwise XOR
Khi một XOR theo chiều bit được thực hiện trên một cặp bit, nó sẽ trả về 1 nếu các bit khác nhau.
Ví dụ 1 bit
0 ^ 0 | 0 |
0 ^ 1 | 1 |
1 ^ 0 | 1 |
1 ^ 1 | 0 |
Ví dụ 4 bít
1111 ^ 0000 | 1111 |
1111 ^ 0001 | 1110 |
1111 ^ 0010 | 1101 |
1111 ^ 0100 | 1011 |
JavaScript Bitwise AND [&]
Bitwise AND chỉ trả về 1 nếu cả hai bit đều là 1.
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 & 1 | 00000000000000000000000000000001 [1] |
JavaScript Bitwise OR [|]
Bitwise OR trả về 1 nếu một trong các bit là 1.
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 | 1 | 00000000000000000000000000000101 [5] |
JavaScript Bitwise XOR [^]
Bitwise XOR trả về 1 nếu các bit khác nhau.
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 ^ 1 | 00000000000000000000000000000100 [4] |
JavaScript Bitwise NOT [~]
5 | 00000000000000000000000000000101 |
~5 | 11111111111111111111111111111010 [-6] |
JavaScript [Zero Fill] Bitwise Left Shift [> 1
11111111111111111111111111111101 [-3]
JavaScript [Zero Fill] Bitwise right Shift [>>>]
Đây là một sự thay đổi bên phải điền bằng không. Một hoặc nhiều bit 0 được đẩy vào từ bên trái và các bit ngoài cùng bên phải rơi ra.
5 | 00000000000000000000000000000101 |
5 >>> 1 | 00000000000000000000000000000010 [2] |
Số nhị phân
Các số nhị phân chỉ có một bit được thiết lập rất dễ hiểu.
00000000000000000000000000000001 | 1 |
00000000000000000000000000000010 | 2 |
00000000000000000000000000000100 | 4 |
00000000000000000000000000001000 | 8 |
00000000000000000000000000010000 | 16 |
00000000000000000000000000100000 | 32 |
00000000000000000000000001000000 | 64 |
Đặt thêm một vài bit nữa sẽ hiển thị mẫu nhị phân.
00000000000000000000000000000101 | 5 [4 + 1] |
00000000000000000000000000001101 | 13 [8 + 4 + 1] |
00000000000000000000000000101101 | 45 [32 + 8 + 4 + 1] |
Chuyển đổi thập phân sang nhị phân
Ví dụ
function dec2bin[dec]{ return [dec >>> 0].toString[2]; }
Xem kết quả
Chuyển đổi nhị phân sang thập phân
Ví dụ
function bin2dec[bin]{ return parseInt[bin, 2].toString[10]; }
Xem kết quả