Ký hiệu cho các số nhị phân như 1000100B - 1

"Chào, Amigo!"

"Chào, Bilaabo!"

"Tôi muốn nói với bạn một chút về các hệ thống đánh số khác nhau."

"Bạn đã nghe nói rằng mọi người sử dụng hệ thống thập phân. Đây là những sự kiện chính của hệ thống này:

1)  10 chữ số dùng để viết các số: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

2)  Số 543 có nghĩa là 5 trăm + 4 chục + 3 đơn vị.

"Điều này tương đương với việc viết 5*100 + 4*10 + 3*1, có thể viết là 5*10 2 + 4*10 1 + 3*10 0 .

Lưu ý rằng hàng nghìn, hàng trăm, hàng chục và hàng đơn vị là lũy thừa của số 10.

1) Một là lũy thừa 10 mũ 0.

2)  Mười là 10 mũ 1.

3) Một trăm là 10 mũ 2.

4)  Một nghìn là 10 lũy thừa ba, v.v.

"Ừ. Hiểu rồi."

"Nhưng bây giờ hãy tưởng tượng rằng chúng ta chỉ có 8 chữ số. Sau đó, chúng ta có hệ bát phân. Đây là thông tin chính của nó:"

1)  8 chữ số dùng để viết các số: 0, 1, 2, 3, 4, 5, 6, 7.

2)  Số 543 8 có nghĩa là 5*8 2 +4*8 1 +3*8 0 . Nói cách khác, đó là 5*64 + 4*8 + 3*1 = 320+32+3 = 320+32+3=355 10

Tôi đã viết 8 và 10 dưới dạng chỉ số dưới để cho biết có bao nhiêu chữ số được sử dụng để biểu thị số đó.

"Tôi nghĩ tôi hiểu rồi. Tôi nghĩ tôi có thể chuyển đổi một số từ hệ bát phân sang hệ thập phân. Nhưng có lẽ tôi không thể đi theo cách khác."

"Không khó lắm. Hãy tưởng tượng bạn cần sử dụng nhiều xe tải để di chuyển một đống cát. Bạn có xe ben, xe tải thường và xe tải rất nhỏ. Nhưng xe tải không thể đi nếu chúng không đầy."

"Bạn sẽ làm điều này như thế nào?"

“Đầu tiên, tôi đổ đầy xe ben vì xe ben là loại lớn nhất. Sau đó, khi thấy không đủ cát đổ đầy xe, tôi chuyển sang xe nhỏ hơn.

"Ở đây thực sự rất giống nhau. Hãy thử chuyển đổi số 355 10 trở lại hệ bát phân."

"Đầu tiên, chúng tôi chia nó cho 64 (8 2 ) và nhận được 5 với phần còn lại là 35. Điều này có nghĩa là chữ số đầu tiên của số của chúng tôi là 5. Sau đó, chúng tôi chia phần còn lại cho 8 (8 1 ) và nhận được 4 với phần còn lại của 3. Như vậy ta được số 543 8 ."

"Nhân tiện, bạn cũng có thể di chuyển theo hướng khác. Rốt cuộc, 543 8 == 5*64+4*8+3 == ((5)*8+4)*8+3. "hàng chục" bát phân của chúng ta " và "hàng trăm" phải chia hết cho 8. Do đó, phần còn lại của phép chia cho 8 sẽ là các chữ số bát phân của chúng ta."

"Đầu tiên, hãy chia 355 cho 8. Ta được 44 với số dư là 3. Tức là, 355=44*8+3. Và 44 có thể được biểu diễn dưới dạng 5*8+4. Do đó, 355= (5*8+ 4)*8+3; Đây là các chữ số của chúng ta: 5, 4, 3. Số chúng ta cần tìm là 543 8 ."

“Tôi nghĩ là tôi hiểu rồi, nhưng tôi sẽ cần luyện tập một chút để hiểu rõ mọi thứ.”

"Lập trình thường liên quan đến việc sử dụng các số có cơ số khác nhau (tức là số chữ số được sử dụng trong hệ thống đánh số). Phổ biến nhất là 2, 8, 10, 16 và 64."

"Nhưng tại sao điều này lại cần thiết? Tại sao chúng ta cần các số được biểu thị bằng 2, 8, 16 hoặc 64 chữ số?"

"Đó là về cách bộ xử lý hoạt động bên trong. Rất đơn giản, nếu dòng điện chạy qua một sợi dây, thì chúng tôi nói rằng giá trị của nó là 1; nếu không có dòng điện, thì giá trị của nó là 0. Tất cả các số được lưu trữ trong các ô nhớ. Những các ô có thiết kế rất cơ bản. Và chúng chỉ có thể lưu trữ 0 hoặc 1."

"Nhưng sự đơn giản hóa như vậy (chỉ 0 hoặc 1) đã có thể làm cho các phần tử bên trong bộ xử lý và bộ nhớ trở nên rất nhỏ. Các bộ xử lý và mô-đun bộ nhớ hiện đại bao gồm hàng tỷ phần tử khác nhau. Và diện tích của chúng thường không quá một centimet vuông."

"Chà. Giờ thì tôi biết rồi."

"Bây giờ chúng ta chuyển sang số nhị phân. Ở đây chúng ta có điều tương tự như với bát phân, chỉ dễ dàng hơn."

1)  2 chữ số dùng để viết các số: 0, 1.

2)  Số 101 2 có nghĩa là 1*2 2 + 0*2 1 + 1*2 0 . Nói cách khác, nó là 1*4+0*2+1*1 =4+1=51 10

"Vâng. Tôi nhớ. Một ô, có thể có giá trị 0 hoặc 1, được gọi là một chút. Nhưng nó không thể lưu trữ nhiều thông tin, vì vậy chúng được kết hợp thành các nhóm 8. Các nhóm này được gọi là byte. "

"Chính xác. Một byte là một nhóm tám bit. Nó có thể lưu trữ các giá trị sau: 00000000, 00000001, ... 11111111. Các giá trị này tương ứng với các số thập phân 0,1, ... 255. Tổng cộng là 256 giá trị."

Số nguyên lớn nhất trong Java là gì? Hay đúng hơn là loại của nó là gì?

"A long. A long bao gồm 8 byte. Nói cách khác, 64 bit. Nó có thể lưu trữ các giá trị từ -2 63 đến 2 63 -1.

"Vâng. Tôi sẽ không nói về cách chuyển đổi số từ thập phân sang nhị phân hoặc ngược lại. Nếu không, bài học sẽ quá dài."

"Thay vào đó, hãy nói thêm một chút về hệ thập lục phân."

"Vâng, nó rất thú vị. Đối với hệ thống nhị phân và bát phân, chúng ta chỉ đơn giản là loại bỏ các chữ số, bắt đầu bằng hai và tám, tương ứng. Nhưng chúng ta phải làm gì ở đây? Thêm các chữ số mới?"

"Chính xác! Nhìn này:"

1) 16 chữ số dùng để viết các số: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.

2) Số 543 16 có nghĩa là 5*16 2 + 4*16 1 + 3*16 0 . Nói cách khác, đó là 5*256+4*16+3*1 = 1280+64+3 = 1347 10

"Vì vậy, chúng tôi chỉ cần thêm các chữ cái dưới dạng chữ số? O_o"

"Đúng. Và vấn đề lớn là gì? Tại sao lại phát minh ra những con số mới khi các chữ cái hoạt động hoàn hảo? Hãy xem thử:"

chữ số thập lục phân giá trị thập phân
0 0
1 1
số 8 số 8
9 9
MỘT 10
b 11
C 12
D 13
e 14
F 15

"Tôi cũng sẽ không nói về việc chuyển đổi từ thập phân sang thập lục phân. Nhưng đây là một sự thật thú vị. Một chữ số thập lục phân được biểu thị bằng chính xác 4 bit, với các giá trị từ 0 đến 15. Vì vậy, một byte có thể được viết bằng tám chữ số nhị phân (0 hoặc 1) hoặc hai chữ số thập lục phân."

"Đây là một ví dụ:"

số thập phân Số nhị phân số thập lục phân
0 0000 0000 00
1 0000 0001 01
15 0000 1111 0f
16 0001 0000 10
31 0001 1111 1f
32 0010 0000 20
128 1000 0000 80
129 1000 0001 81
255 1111 1111 ff

"Biểu diễn thập lục phân dễ dàng được chuyển đổi thành nhị phân (và ngược lại). Đó là lý do tại sao biểu diễn byte bên trong của một số hiếm khi được đưa ra ở dạng nhị phân (sử dụng 0 và 1) trong lập trình. Điều đó sẽ quá dài và khó hiểu. Ký hiệu thập lục phân dễ đọc và nhỏ gọn hơn nhiều."

"Tôi đồng ý. Ngay cả tôi cũng thích nó."

"Nhân tiện, Java cho phép bạn viết trực tiếp các số trong các hệ thống đánh số khác nhau trong mã:"

Căn cứ đặc điểm phân biệt ví dụ số không hợp lệ
2 0b  ở đầu số 0b 00001111 0b 11111 2 1
số 8 0  ở đầu số 0 1234343 0 12 8
10 Không có 95459 909 một
16 0x  ở đầu số 0x10ff _ 0x 1c g

"Bài học tuyệt vời. Cảm ơn, Bilaabo."