07/09/2018, 14:53

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);
}

Tham khảo thêm các khóa học lập trình web từ Front-end đến Back-end do trực tiếp giảng viên quốc tế trường FPT Arena giảng dạy giúp bạn thành thạo kỹ năng lập trình web từ CƠ BẢN – NÂNG CAO với giá chỉ từ 290,000đ:
  • 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
0