Hoạt động theo bit của JavaScript
Toán tử bitwise JavaScript
Operator | Name | Description |
---|---|---|
& | AND | Sets each bit to 1 if both bits are 1 |
| | OR | Sets each bit to 1 if one of two bits is 1 |
^ | XOR | Sets each bit to 1 if only one of two bits is 1 |
~ | NOT | Inverts all the bits |
<< | Zero fill left shift | Shifts left by pushing zeros in from the right and let the leftmost bits fall off |
>> | Signed right shift | Shifts right by pushing copies of the leftmost bit in from the left, and let the rightmost bits fall off |
>>> | Zero fill right shift | Shifts right by pushing zeros in from the left, and let the rightmost bits fall off |
Ví dụ
Operation | Result | Same as | Result |
---|---|---|---|
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 |
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 phẩy động 64 bit, nhưng tất cả các phép toán theo 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 chuyển đổi số thành số nguyên có dấu 32 bit.
Sau khi thực hiện thao tác theo bit, kết quả được chuyển đổi trở lại số JavaScript 64 bit.
Các ví dụ trên sử dụng số nhị phân không dấu 4 bit. Vì điều này ~ 5 trả về 10.
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.
000000000000000000000000000000101 (5)
111111111111111111111111111111010 (~5 = -6)
Số nguyên có dấu sử dụng bit ngoài cùng bên trái làm dấu trừ.
JavaScript theo bit VÀ
Khi phép AND theo bit được thực hiện trên một cặp bit, nó trả về 1 nếu cả hai bit đều là 1.
Hoạt động | Kết quả |
---|---|
0 & 0 | 0 |
0 & 1 | 0 |
1 & 0 | 0 |
1 & 1 | 1 |
Hoạt động | Kết quả |
---|---|
1111 & 0000 | 0000 |
1111 & 0001 | 0001 |
1111 & 0010 | 0010 |
1111 & 0100 | 0100 |
JavaScript theo bit HOẶC
Khi OR theo bit đượ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:
Hoạt động | Kết quả |
---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Hoạt động | Kết quả |
---|---|
1111 | 0000 | 1111 |
1111 | 0001 | 1111 |
1111 | 0010 | 1111 |
1111 | 0100 | 1111 |
JavaScript Bitwise XOR
Khi XOR theo bit được thực hiện trên một cặp bit, nó trả về 1 nếu các bit khác nhau:
Hoạt động | Kết quả |
---|---|
0 ^ 0 | 0 |
0 ^ 1 | 1 |
1 ^ 0 | 1 |
1 ^ 1 | 0 |
Hoạt động | Kết quả |
---|---|
1111 ^ 0000 | 1111 |
1111 ^ 0001 | 1110 |
1111 ^ 0010 | 1101 |
1111 ^ 0100 | 1011 |
JavaScript theo chiều bit VÀ (&)
Bitwise AND chỉ trả về 1 nếu cả hai bit đều là 1:
Số thập phân | nhị phân |
---|---|
5 | 000000000000000000000000000000101 |
1 | 000000000000000000000000000000001 |
5 & 1 | 000000000000000000000000000000001 (1) |
JavaScript theo bit HOẶC (|)
Bitwise HOẶC trả về 1 nếu một trong các bit là 1:
Số thập phân | nhị phân |
---|---|
5 | 000000000000000000000000000000101 |
1 | 000000000000000000000000000000001 |
5 | 1 | 000000000000000000000000000000101 (5) |
JavaScript Bitwise XOR (^)
Bitwise XOR trả về 1 nếu các bit khác nhau:
Số thập phân | nhị phân |
---|---|
5 | 000000000000000000000000000000101 |
1 | 000000000000000000000000000000001 |
5 ^ 1 | 000000000000000000000000000000100 (4) |
JavaScript theo bit KHÔNG (~)
Số thập phân | nhị phân |
---|---|
5 | 000000000000000000000000000000101 |
~5 | 11111111111111111111111111111010 (-6) |
JavaScript (Điền bằng 0) Dịch chuyển trái theo bit (<<)
Đây là ca trái điền số 0. Một hoặc nhiều bit 0 được đẩy vào từ bên phải và các bit ngoài cùng bên trái sẽ rơi ra:
Số thập phân | nhị phân |
---|---|
5 | 000000000000000000000000000000101 |
5 << 1 | 000000000000000000000000000001010 (10) |
JavaScript (Bảo toàn dấu hiệu) Dịch chuyển phải theo bit (>>)
Đây là dấu hiệu bảo toàn sự dịch chuyển sang phải. Bản sao của bit ngoài cùng bên trái được đẩy vào từ bên trái và các bit ngoài cùng bên phải rơi ra:
Số thập phân | nhị phân |
---|---|
-5 | 11111111111111111111111111111011 |
-5 >> 1 | 11111111111111111111111111111101 (-3) |
JavaScript (Không điền) Shift phải (>>>)
Đây là ca phải điền số 0. 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 sẽ rơi ra:
Số thập phân | nhị phân |
---|---|
5 | 000000000000000000000000000000101 |
5 >>> 1 | 000000000000000000000000000000010 (2) |
Số nhị phân
Các số nhị phân chỉ có một tập hợp bit rất dễ hiểu:
Biểu diễn nhị phân | Giá trị thập phân |
---|---|
000000000000000000000000000000001 | 1 |
000000000000000000000000000000010 | 2 |
000000000000000000000000000000100 | 4 |
000000000000000000000000000001000 | số 8 |
00000000000000000000000000010000 | 16 |
00000000000000000000000000100000 | 32 |
00000000000000000000000001000000 | 64 |
Đặt thêm một vài bit sẽ hiển thị mẫu nhị phân:
Biểu diễn nhị phân | Giá trị thập phân |
---|---|
000000000000000000000000000000101 | 5 (4 + 1) |
00000000000000000000000000001101 | 13 (8 + 4 + 1) |
00000000000000000000000000101101 | 45 (32 + 8 + 4 + 1) |
Số nhị phân JavaScript được lưu trữ ở định dạng bù hai.
Điều này có nghĩa là số âm là số KHÔNG theo bit của số cộng 1:
Biểu diễn nhị phân | Giá trị thập phân |
---|---|
000000000000000000000000000000101 | 5 |
11111111111111111111111111111011 | -5 |
000000000000000000000000000000110 | 6 |
11111111111111111111111111111010 | -6 |
00000000000000000000000000101000 | 40 |
11111111111111111111111111011000 | -40 |
Câu nói đùa:
Chỉ có 10 loại người trên thế giới: những người hiểu hệ nhị phân và những người không hiểu.