1. Mã hóa bát phân

Nói về mã hóa... Như bạn đã biết, trong cuộc sống hàng ngày, chúng ta sử dụng ký hiệu thập phân : tất cả các số của chúng ta được biểu diễn bằng 10 ký hiệu: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Có 10 chữ số, vì vậy hệ thống được gọi là thập phân.

Nhưng các lập trình viên là những nhà phát minh vĩ đại. Họ ngay lập tức đưa ra các mã hóa sử dụng một số ký hiệu khác. Ví dụ: 16, 8 và 2.

Mã hóa thay thế sử dụng 8 ký hiệu là dễ nhất: chỉ cần bỏ 8 và 9 và bạn sẽ nhận được mã hóa bát phân ( hệ thống số bát phân ).

Và vâng, bạn có thể sử dụng hệ bát phân để chỉ định các chữ số. Tất nhiên, nếu bạn thực sự cần. Nó dễ dàng hơn âm thanh. Bạn chỉ cần viết số 0 trước số.

Nói cách khác, Java coi bất kỳ số nguyên nào bắt đầu bằng 0 là một giá trị bát phân.

Ví dụ:

Mã số ghi chú
int x = 015;
x là 13: 1*8+5
int x = 025;
x là 21: 2*8+5
int x = 0123;
x là 83: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0
int x = 078;
Điều này sẽ không biên dịch: 8 không phải là một trong những ký hiệu được sử dụng trong mã hóa bát phân.

Không chắc là bạn sẽ cần viết các số bát phân trong mã của mình, nhưng bạn nên biết chúng là gì. Rốt cuộc, bạn sẽ phải đọc mã do người khác viết. Và như đã đề cập ở trên, các lập trình viên là những nhà phát minh lớn.

Hãy nhớ rằng bạn không thể đơn giản viết số 0 trước mọi số.



2. Mã hóa nhị phân

Mã hóa nhị phân thậm chí còn thú vị hơn. Nếu bát phân chỉ có các chữ số 0-7, thì hệ nhị phân chỉ có 0 và 1. Tại sao mã hóa này lại cần thiết?

Điều này liên quan đến cấu trúc bên trong của máy tính. Mọi thứ trong máy tính đều chạy bằng điện, và khi nó xảy ra, cách hiệu quả nhất để lưu trữ và truyền một thứ gì đó bằng điện là sử dụng hai trạng thái: hoặc không có điện trong dây (không) và có điện (một).

Đây là nguồn gốc của sự phổ biến của hệ thống số nhị phân.

Về nguyên tắc, nó không được sử dụng thường xuyên trong Java: Java được coi là ngôn ngữ cấp cao, hoàn toàn trừu tượng với phần cứng mà nó chạy trên đó. Thật vậy, bạn có thực sự quan tâm định dạng nào được sử dụng để lưu trữ và xử lý dữ liệu bên trong máy tính không?

Nhưng trong những thập kỷ qua, các lập trình viên đã yêu thích mã hóa nhị phân (và các mã hóa khác dựa trên nó). Kết quả là, Java có các toán tử lấy số nhị phân làm đầu vào. Và độ chính xác của các số dấu phẩy động phụ thuộc vào biểu diễn nhị phân của chúng.

Về cơ bản, bạn biết về mã hóa này sẽ tốt hơn là không biết.

Và như trường hợp của mã hóa bát phân, Java có một cách để mã hóa các ký tự bằng cách sử dụng hệ thống nhị phân. Nghĩa là, các chữ chỉ bao gồm các số 0 và 1. Để trình biên dịch Java hiểu rằng mã chứa một chữ số được mã hóa ở dạng nhị phân chứ không chỉ đơn giản là một số thập phân bao gồm các số 0 và 1, tất cả các chữ nhị phân được xác định bằng tiền tố 0b ('b' xuất phát từ từ nhị phân) .

Ví dụ:

Mã số ghi chú
int x = 0b100;
х là 4: 1*4+0*2+0
int x = 0b1111;
х là 15: 1*8+1*4+1*2+1
int x = 0b1111000111;
х là 967: 1*2 9 +1*2 8 +1*2 7 +1*2 6 +0*2 5 +0*2 4 +0 *2 3 +1*2 2 +1*2+1;
int x = 0b12000;
Điều này sẽ không biên dịch: 2 không phải là một trong những ký hiệu được sử dụng trong mã hóa nhị phân.


3. Mã hóa thập lục phân

Ngoài mã hóa bát phân và nhị phân, chữ cũng có thể được viết dưới dạng thập lục phân. Đây là một bảng mã rất phổ biến.

Đó là bởi vì mặc dù ký hiệu nhị phân gần nhất có thể với cách các số được lưu trữ thực sự, nhưng con người quá khó để làm việc hiệu quả với các số như vậy: trong hệ nhị phân, số một triệu chứa 20 chữ số chứ không phải 7.

Đó là lý do tại sao các lập trình viên nghĩ ra hệ thập lục phân. Rốt cuộc, 16 là 2 được nâng lên lũy thừa thứ 4 , do đó, chính xác 4 bit tương ứng với một chữ số thập lục phân. Nói một cách đại khái, cứ 4 bit giờ đây có thể được viết dưới dạng một chữ số thập lục phân.

Mã hóa thập lục phân cũng có tiền tố duy nhất của riêng nó: 0x . Ví dụ:

số thập phân ký hiệu nhị phân ký hiệu thập lục phân
17 0b 0001 0001 0x 1 1
4 1 0b 0010 1 00 1 0x2 9 _
85 0b 0101 0101 0x 5 5
256 0b 1 0000 0000 0x 1 0 0

Ok, bạn nói, đủ rõ ràng làm thế nào chúng ta có hệ thống bát phân: chúng ta chỉ loại bỏ các số 8 và 9, nhưng chúng ta lấy 6 ký hiệu bổ sung cho hệ thập lục phân ở đâu? Tôi muốn nhìn thấy chúng!

Tất cả đều đơn giản. 6 chữ cái đầu tiên của bảng chữ cái tiếng Anh được lấy làm 6 ký hiệu còn thiếu: A (10), B (11), C (12), D (13), E (14), F (15).

Ví dụ:

ký hiệu thập lục phân ký hiệu nhị phân số thập phân
0x1 _ 0b 0000 0001 1
0x9 _ 0b 0000 1001 9
0x MỘT 0b 0000 1010 10
0xB _ 0b 0000 1011 11
0xC _ 0b 0000 1100 12
0xD _ 0b 0000 1101 13
0xE _ 0b 0000 1110 14
0xF _ 0b 0000 1111 15
0x 1 F 0b 0001 1111 31
0x A F 0b 1010 1111 175
0x F F 0b 1111 1111 255
0x F F F 0b 1111 1111 1111 4095


4. Cách chuyển đổi một số từ hệ thập lục phân

Chuyển đổi một số từ thập lục phân sang thập phân rất dễ dàng. Giả sử bạn có số 0 x A F C F . Bao nhiêu là trong số thập phân?

Đầu tiên, chúng tôi có một hệ thống số theo vị trí, có nghĩa là sự đóng góp của mỗi chữ số vào số tổng thể tăng theo hệ số 16 khi chúng tôi di chuyển từ phải sang trái:

A * 16 3 + F * 16 2 + C * 16 1 + F

Ký hiệu A tương ứng với số 10, chữ C tương ứng với số 12 và chữ F tương ứng với số mười lăm. Chúng tôi nhận được:

10 * 16 3 + 15 * 16 2 + 12 * 16 1 + 15

Nâng 16 lên các lũy thừa khác nhau tương ứng với các chữ số, ta được:

10 * 4096 + 15 * 256 + 12 * 16 + 15

Chúng tôi tổng hợp mọi thứ và nhận được:

45007

Bạn biết làm thế nào số này được lưu trữ trong bộ nhớ:

0x A F C F

Nhưng bây giờ hãy chuyển đổi nó thành nhị phân. Ở dạng nhị phân, nó sẽ là:

0b 1010 1111 1100 1111

Mỗi bộ bốn bit tương ứng với chính xác một ký tự thập lục phân. Đó là siêu thuận tiện. Không có bất kỳ phép nhân hay lũy thừa nào."