bin_dec_hex - Cách sử dụng ký hiệu nhị phân, thập phân và thập lục phân.
Hầu hết mọi người sử dụng hệ thống đánh số thập phân. Hệ thống này sử dụng mười ký hiệu để biểu thị các con số. Khi mười biểu tượng đó được sử dụng hết, chúng sẽ bắt đầu lại từ đầu và tăng dần vị trí sang trái. Chữ số 0 chỉ được hiển thị nếu nó là ký hiệu duy nhất trong dãy hoặc nếu nó không phải là ký hiệu đầu tiên.
Nếu điều này nghe có vẻ khó hiểu đối với bạn, thì đây là những gì tôi vừa nói qua các con số:
0
1
2
3
4
5
6
7
8
9
10
11
12
13và như thế.
Mỗi khi chữ số chín được tăng lên, nó được đặt lại về 0 và vị trí trước đó (bên trái) được tăng lên (từ 0 đến 1). Sau đó, số 9 có thể được coi là 00009 và khi chúng ta tăng số 9, chúng ta đặt lại số 0 và tăng chữ số ngay trước số 9 để số trở thành 00010. Các số 0 đứng đầu chúng ta không viết trừ khi đó là chữ số duy nhất (số 0). Và tất nhiên, chúng tôi viết số 0 nếu chúng xuất hiện ở bất kỳ đâu bên trong hoặc ở cuối một số:
"00010" -> " 0010" -> " 010" -> " 10"
nhưng không
" 1 ".
Điều này khá cơ bản, bạn đã biết điều này. Tại sao tôi nói với nó? Chà, máy tính thường không biểu diễn các số có 10 chữ số khác nhau. Chúng chỉ sử dụng hai ký hiệu khác nhau, cụ thể là 0 và 1. Áp dụng các quy tắc tương tự cho tập hợp các chữ số này và bạn sẽ có hệ thống đánh số nhị phân:
0
1
10
11
100
101
110
111
1000
1001
1010
1011
1100
1101và như thế.
Nếu bạn đếm số hàng, bạn sẽ thấy rằng đây lại là 14 số khác nhau. Các số giống nhau và có nghĩa giống như trong danh sách đầu tiên, chúng tôi chỉ sử dụng một cách biểu diễn khác. Điều này có nghĩa là bạn phải biết cách biểu diễn được sử dụng, hay còn gọi là hệ thống đánh số hoặc cơ số. Thông thường, nếu chúng ta không chỉ định rõ ràng hệ thống đánh số được sử dụng, chúng ta sẽ mặc nhiên sử dụng hệ thống thập phân. Nếu chúng tôi muốn sử dụng bất kỳ hệ thống đánh số nào khác, chúng tôi sẽ phải làm rõ điều đó. Có một vài phương pháp được áp dụng rộng rãi để làm như vậy. Một dạng phổ biến là viết 1010(2) có nghĩa là bạn đã viết một số dưới dạng biểu diễn nhị phân của nó. Nó là số mười. Nếu bạn viết 1010 mà không chỉ định cơ số, số này được hiểu là một nghìn lẻ khi sử dụng cơ số 10.
Trong sách, một hình thức khác là phổ biến. Nó sử dụng các chỉ số dưới (các ký tự nhỏ, nhiều hơn hoặc ít hơn ở giữa hai hàng). Bạn có thể bỏ dấu ngoặc đơn trong trường hợp đó và viết số bằng ký tự bình thường theo sau là số hai nhỏ ngay sau nó.
Vì hệ thống đánh số được sử dụng còn được gọi là cơ số, chúng ta nói về số 1100 cơ số 2, số 12 cơ số 10.
Trong hệ thống nhị phân, người ta thường viết các số 0 đứng đầu. Các số được viết thành chuỗi bốn, tám hoặc mười sáu tùy thuộc vào ngữ cảnh.
Chúng ta có thể sử dụng dạng nhị phân khi nói chuyện với máy tính (...lập trình...), nhưng các con số sẽ có biểu diễn lớn. Số 65'535 (thường trong hệ thập phân a ' được sử dụng để phân tách các khối có ba chữ số cho dễ đọc) sẽ được viết thành 11111111111111111(2) gấp 16 lần chữ số 1. Điều này khó và dễ mắc lỗi. Do đó, chúng tôi thường sử dụng một cơ sở khác, được gọi là hệ thập lục phân. Nó sử dụng 16 biểu tượng khác nhau. Đầu tiên, các ký hiệu từ hệ thống thập phân được sử dụng, sau đó chúng tôi tiếp tục với các ký tự chữ cái. Chúng tôi nhận được 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E và F. Hệ thống này được chọn vì dạng thập lục phân có thể được chuyển đổi sang hệ thống nhị phân rất dễ dàng (và ngược lại).
Vẫn còn một hệ thống khác được sử dụng, được gọi là hệ thống bát phân. Điều này ngày xưa phổ biến hơn, nhưng không còn được sử dụng thường xuyên nữa. Vì đôi khi bạn có thể thấy nó được sử dụng, bạn nên làm quen với nó và chúng tôi sẽ trình bày nó bên dưới. Đó là câu chuyện tương tự như với các biểu tượng khác, nhưng với tám biểu tượng khác nhau.
Binary (2)
Octal (8)
Decimal (10)
Hexadecimal (16)
(2) (8) (10) (16)
00000 0 0 0
00001 1 1 1
00010 2 2 2
00011 3 3 3
00100 4 4 4
00101 5 5 5
00110 6 6 6
00111 7 7 7
01000 10 8 8
01001 11 9 9
01010 12 10 A
01011 13 11 B
01100 14 12 C
01101 15 13 D
01110 16 14 E
01111 17 15 F
10000 20 16 10
10001 21 17 11
10010 22 18 12
10011 23 19 13
10100 24 20 14
10101 25 21 15Hầu hết các máy tính được sử dụng ngày nay đang sử dụng byte tám bit. Điều này có nghĩa là chúng lưu trữ tám bit cùng một lúc. Bạn có thể thấy tại sao hệ bát phân không thực tế nhất cho điều đó: Bạn cần ba chữ số để biểu thị tám bit và điều này có nghĩa là bạn phải sử dụng một chữ số đầy đủ để chỉ biểu thị hai bit (2+3+3=8). Đây là một sự lãng phí. Đối với các chữ số thập lục phân, bạn chỉ cần hai chữ số được sử dụng hoàn toàn:
(2) (8) (10) (16)
11111111 377 255 FFBạn có thể thấy tại sao hệ nhị phân và hệ thập lục phân có thể được chuyển đổi nhanh chóng: Đối với mỗi chữ số hệ thập lục phân có chính xác bốn chữ số nhị phân. Lấy một số nhị phân: lấy bốn chữ số từ bên phải và tạo một chữ số thập lục phân từ nó (xem bảng trên). Lặp lại điều này cho đến khi không còn chữ số nào nữa. Và ngược lại: Lấy một số thập lục phân. Đối với mỗi chữ số, hãy viết số nhị phân tương đương của nó.
Máy tính (hay đúng hơn là trình phân tích cú pháp chạy trên chúng) sẽ gặp khó khăn khi chuyển đổi một số như 1234(16). Do đó, số thập lục phân được chỉ định bằng tiền tố. Tiền tố này phụ thuộc vào ngôn ngữ bạn đang viết. Một số tiền tố là 0x cho C, $cho Pascal, # cho HTML. Người ta thường cho rằng nếu một số bắt đầu bằng số 0 thì đó là hệ bát phân. Nó không quan trọng những gì được sử dụng miễn là bạn biết nó là gì. Tôi sẽ sử dụng 0x cho hệ thập lục phân, % cho hệ nhị phân và 0 cho hệ bát phân. Các số sau đây đều giống nhau, chỉ có cách biểu diễn (cơ số) của chúng là khác nhau: 021 0x11 17 %00010001
Để thực hiện phép tính số học và chuyển đổi, bạn cần hiểu thêm một điều nữa. Đó là điều bạn đã biết nhưng có lẽ bạn chưa thấy:
Nếu bạn viết ra 1234, (không có tiền tố, vì vậy nó là số thập phân), bạn đang nói về số một nghìn hai trăm ba mươi tư. Trong loại của một công thức:
1 * 1000 = 1000
2 * 100 = 200
3 * 10 = 30
4 * 1 = 4
This can also be written as:
1 * 10^3
2 * 10^2
3 * 10^1
4 * 10^0trong đó ^có nghĩa là sức mạnh của.
Chúng ta đang sử dụng cơ số 10 và các vị trí 0,1,2 và 3. Vị trí ngoài cùng bên phải KHÔNG được nhân với 10. Vị trí thứ hai từ bên phải phải được nhân một lần với 10. Vị trí thứ ba từ bên phải được nhân hai lần với 10. Điều này tiếp tục cho bất kỳ vị trí nào được sử dụng.
Nó giống nhau trong tất cả các đại diện khác:
0x1234 sẽ là
1 * 16^3
2 * 16^2
3 * 16^1
4 * 16^0
01234 would be
1 * 8^3
2 * 8^2
3 * 8^1
4 * 8^0Không thể thực hiện ví dụ này cho hệ nhị phân vì hệ thống đó chỉ sử dụng hai ký hiệu. Một vi dụ khac:
%1010 sẽ là
1 * 2^3
0 * 2^2
1 * 2^1
0 * 2^0Sẽ dễ dàng hơn nếu chuyển đổi nó sang dạng thập lục phân và chỉ cần dịch %1010 thành 0xA. Sau một thời gian bạn sẽ quen với nó. Bạn sẽ không cần thực hiện bất kỳ phép tính nào nữa mà chỉ cần biết rằng 0xA có nghĩa là 10.
Để chuyển đổi số thập phân thành số thập lục phân, bạn có thể sử dụng phương pháp tiếp theo. Sẽ mất một thời gian để có thể ước tính, nhưng sẽ dễ dàng hơn khi bạn sử dụng hệ thống thường xuyên hơn. Chúng ta sẽ xem xét một cách khác sau đó.
Trước tiên, bạn cần biết có bao nhiêu vị trí sẽ được sử dụng trong hệ thống khác. Để làm như vậy, bạn cần biết số lượng tối đa bạn sẽ sử dụng. Chà, điều đó không khó như vẻ ngoài của nó. Ở dạng thập phân, số tối đa mà bạn có thể tạo với hai chữ số là 99. Số tối đa cho ba chữ số: 999. Số tiếp theo sẽ cần thêm một vị trí. Đảo ngược ý tưởng này và bạn sẽ thấy rằng số có thể được tìm thấy bằng cách lấy 10^3 (10*10*10 là 1000) trừ 1 hoặc 10^2 trừ 1.
Điều này cũng có thể được thực hiện cho hệ thập lục phân:
16^4 = 0x10000 = 65536
16^3 = 0x1000 = 4096
16^2 = 0x100 = 256
16^1 = 0x10 = 16Nếu một số nhỏ hơn 65'536, nó sẽ vừa với bốn vị trí. Nếu số lớn hơn 4'095, bạn phải sử dụng vị trí 4. Bạn có thể trừ 4'096 bao nhiêu lần khỏi số mà không xuống dưới 0 là chữ số đầu tiên bạn viết ra. Đây sẽ luôn là một số từ 1 đến 15 (0x1 đến 0xF). Làm tương tự cho các vị trí khác.
Hãy thử với 41'029. Nó nhỏ hơn 16^4 nhưng lớn hơn 16^3-1. Điều này có nghĩa là chúng ta phải sử dụng bốn vị trí. Chúng ta có thể trừ 16^3 từ 41'029 mười lần mà không dưới 0. Do đó, chữ số ngoài cùng bên trái sẽ là A, vì vậy chúng ta có 0xA????. Số giảm xuống còn 41'029 - 10*4'096=41'029-40'960=69. 69 nhỏ hơn 16^3 nhưng không lớn hơn 16^2-1. Do đó, chữ số thứ hai là 0 và bây giờ chúng ta có 0xA0??. 69 nhỏ hơn 16^2 và lớn hơn 16^1-1. Chúng ta có thể trừ 16^1 (đơn giản là 16) bốn lần và viết 4 để có 0xA04?. Trừ 64 từ 69 (69 - 4*16) và chữ số cuối cùng là 5 -> 0xA045.
Phương pháp khác xây dựng số từ bên phải. Hãy thử lại 41'029. Chia hết cho 16 và không dùng phân số (chỉ dùng số nguyên).
41029/16 là 2564 có số dư là 5. Viết bớt 5. 2564/16 là 160 có số dư là 4. Viết số 4 trước số 5. 160/16 là 10 không có số dư. Thêm 45 vào trước 0. 10/16 thấp hơn một. Kết thúc tại đây và thêm 0xA vào trước. Kết thúc bằng 0xA045.
Phương pháp nào để sử dụng là tùy thuộc vào bạn. Sử dụng bất cứ điều gì làm việc cho bạn. Tôi sử dụng cả hai mà không thể biết tôi sử dụng phương pháp nào trong từng trường hợp, nó chỉ phụ thuộc vào số lượng, tôi nghĩ vậy. Thực tế là, một số con số sẽ xảy ra thường xuyên trong khi lập trình. Nếu số gần với số mà tôi quen thuộc, thì tôi sẽ sử dụng phương pháp đầu tiên (chẳng hạn như 32'770 thành 32'768 + 2 và tôi chỉ biết rằng nó là 0x8000 + 0x2=0x8002).
Đối với nhị phân, cách tiếp cận tương tự có thể được sử dụng. Cơ sở là 2 chứ không phải 16, và số lượng vị trí sẽ tăng lên nhanh chóng. Sử dụng phương pháp thứ hai có ưu điểm là bạn có thể thấy rất dễ dàng nếu bạn nên viết số 0 hay số 1: nếu bạn chia cho hai số dư sẽ bằng không nếu đó là số chẵn và bằng 1 nếu là số lẻ:
41029 / 2 = 20514 remainder 1
20514 / 2 = 10257 remainder 0
10257 / 2 = 5128 remainder 1
5128 / 2 = 2564 remainder 0
2564 / 2 = 1282 remainder 0
1282 / 2 = 641 remainder 0
641 / 2 = 320 remainder 1
320 / 2 = 160 remainder 0
160 / 2 = 80 remainder 0
80 / 2 = 40 remainder 0
40 / 2 = 20 remainder 0
20 / 2 = 10 remainder 0
10 / 2 = 5 remainder 0
5 / 2 = 2 remainder 1
2 / 2 = 1 remainder 0
1 / 2 below 0 remainder 1Viết kết quả từ phải sang trái: %1010000001000101
Nhóm bốn người:
%1010000001000101
%101000000100 0101
%10100000 0100 0101
%1010 0000 0100 0101Chuyển đổi thành thập lục phân: 0xA045
Nhóm %1010000001000101 thành ba và chuyển thành bát phân:
%1010000001000101
%1010000001000 101
%1010000001 000 101
%1010000 001 000 101
%1010 000 001 000 101
%1 010 000 001 000 101
%001 010 000 001 000 101
1 2 0 1 0 5 --> 0120105
So: %1010000001000101 = 0120105 = 0xA045 = 41029
Or: 1010000001000101(2) = 120105(8) = A045(16) = 41029(10)
Or: 1010000001000101(2) = 120105(8) = A045(16) = 41029Lúc đầu, khi cộng các số, bạn sẽ chuyển đổi chúng sang dạng thập phân và sau đó trở lại dạng ban đầu sau khi thực hiện phép cộng. Nếu thường xuyên sử dụng hệ thống đánh số khác, bạn sẽ thấy rằng mình có thể thực hiện các phép tính số học trực tiếp trong cơ số được sử dụng. Trong bất kỳ biểu diễn nào cũng giống nhau, cộng các số ở bên phải, viết ra chữ số ngoài cùng bên phải từ kết quả, ghi nhớ các chữ số khác và sử dụng chúng trong vòng tiếp theo. Tiếp tục với chữ số thứ hai từ bên phải và cứ thế:
%1010 + %0111 --> 10 + 7 --> 17 --> %00010001
sẽ trở thành
%1010
%0111 +
||||
|||+-- add 0 + 1, result is 1, nothing to remember
||+--- add 1 + 1, result is %10, write down 0 and remember 1
|+---- add 0 + 1 + 1(remembered), result = 0, remember 1
+----- add 1 + 0 + 1(remembered), result = 0, remember 1
nothing to add, 1 remembered, result = 1
--------
%10001 is the result, I like to write it as %00010001Đối với các giá trị thấp, hãy cố gắng tự tính toán, sau đó kiểm tra chúng bằng máy tính bỏ túi. Bạn càng tự mình tính toán, bạn sẽ càng thấy rằng mình không phạm sai lầm. Cuối cùng, bạn sẽ tính toán trong các cơ số khác dễ dàng như khi bạn làm chúng trong số thập phân.
Khi những con số lớn hơn, bạn sẽ phải nhận ra rằng một chiếc máy tính không được gọi là máy tính chỉ để có một cái tên đẹp. Có rất nhiều máy tính khác nhau có sẵn, hãy sử dụng chúng. Đối với Unix, bạn có thể sử dụng bc viết tắt của Máy tính nhị phân. Nó tính toán không chỉ ở dạng thập phân mà còn ở tất cả các cơ số mà bạn muốn sử dụng (trong số đó có Nhị phân).
Đối với người sử dụng Windows: Khởi động máy tính (bắt đầu->chương trình->phụ kiện->máy tính) và nếu cần, nhấp vào xem->khoa học. Bây giờ bạn có một máy tính khoa học và có thể tính toán ở dạng nhị phân hoặc thập lục phân.
Tôi hy vọng bạn thích các ví dụ và mô tả của họ. Nếu bạn làm như vậy, hãy giúp đỡ người khác bằng cách chỉ cho họ tài liệu này khi họ đặt câu hỏi cơ bản. Họ sẽ không chỉ nhận được câu trả lời mà còn học được nhiều điều hơn nữa.
Alex van den Bogaerdt