Hệ thập lục phân là gì?


13

Hệ thập lục phân là gì và tại sao nó được sử dụng nhiều trong điện toán? Tôi biết rằng máy tính sử dụng 0 và 1 để lưu trữ dữ liệu, vậy tại sao chúng ta sử dụng thập lục phân?


13
Nếu không lạc đề, làm thế nào một câu hỏi cơ bản như vậy không phải là một bản sao 5 năm sau khi bắt đầu Siêu người dùng?
Peter Mortensen

3
@PeterMortensen Ngay cả kỳ lạ, nó thậm chí còn chưa được hỏi trên bất kỳ trang web chị em nào, ít nhất, không phải là tôi có thể tìm thấy.
Nzall

9
Có thể không cần phải hỏi vì Wikipedia có câu trả lời khá hay: en.wikipedia.org/wiki/Hexadecimal
Piers Myers

4
Tại sao rất nhiều upvote?
Vi.

Câu trả lời:


31

Hệ thập lục phân là một hệ thống số rất phổ biến trong điện toán. Bạn có thể đã nghe nói về nhị phân trước đây, chỉ có 1s và 0.

Con người chủ yếu sử dụng hệ thống thập phân (cơ sở 10), trong đó chúng ta có 10 chữ số:

0, 1, 2, 3, 4, 5, 6, 7, 8 và 9

Mặc dù, máy tính không hoạt động bằng hệ thống thập phân. Chúng có trạng thái nhị phân (một cái gì đó là đúng hoặc sai) và do đó hoạt động trong cơ sở 2 (số nhị phân thường có tiền tố 0b) với các chữ số duy nhất là 0 và 1.

Trong những ngày trước, bát phân (hoặc cơ sở 8) đã được sử dụng. Thật tốt vì "10" trong cơ sở 8 là "0b1000" ở dạng nhị phân (10 ở số thập phân là 1010 ở dạng nhị phân). Octal thường có tiền tố "0o" khi viết số (nhưng có tiền tố chỉ là '0' trong hầu hết các ngôn ngữ lập trình). Nó được gọi là cơ sở 8 vì chúng ta có tám chữ số.

Octal vẫn đang được sử dụng cho đến ngày nay, chủ yếu là khi thiết lập quyền trong Unix và Linux

Thời gian trôi qua, chúng tôi cần một cách dễ dàng hơn để thể hiện số lượng lớn hơn, vì sức mạnh tính toán và không gian đang tăng lên nhanh chóng. Nó trở thành tiêu chuẩn để sử dụng thập lục phân , hoặc cơ sở 16, bởi vì 16, như 8 là lũy thừa 2, giúp dễ dàng thực hiện chuyển đổi từng chữ số (xem nhận xét này. Bởi vì có 16 chữ số, chữ cái đã được sử dụng cho các chữ số khác. Ngoài ra, hex thường có tiền tố là 0x.

Số hex cũng hữu ích vì số hex là 4 bit (số 1 bát phân có thể đại diện cho 2), và do đó hai số trong một byte. Trong hầu hết các trình soạn thảo hex , đây là cách một byte được biểu diễn.

Đếm

Trong cơ sở 10, chúng ta có 10 chữ số. Sau 9, chúng ta phải làm gì? Chúng tôi hết số. Chúng tôi tạo một vị trí "hàng chục" ở bên trái của số ban đầu, có 1 và cực phải trở thành 0. Điều tương tự cũng xảy ra trong thập lục phân:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11, v.v.

Cho đến khi chúng tôi nhận được 0x1F, và sau đó quá trình lặp lại cho đến 0xFF (255 ở dạng thập phân) và sau đó chúng tôi nhận được 0x100. Thông tin thêm về đếm có thể được tìm thấy ở đây .

Dưới đây là biểu đồ hiển thị các chuyển đổi giữa thập phân, thập lục phân, bát phân và nhị phân: Biểu đồ chuyển đổi thập lục phân


21
Lợi ích chính là, bởi vì 16 là lũy thừa của 2, bạn có thể thực hiện chuyển đổi từng chữ số.
TRiG

2
Lưu ý rằng nhiều ngôn ngữ sử dụng 0tiền tố và không phải 0ocho số Octal.
ysap

2
Lưu ý của bạn về 16 là bội số của 2 được sao chép không chính xác từ nhận xét của TRiG. Là bội số không phải là mối quan hệ liên quan.
Ryan Reich

2
@ justcool393, có thể đáng nói là tên cho cái mà bạn gọi là "cơ sở 10" thực sự là "thập phân". Điều này có thể giúp làm rõ mối quan hệ giữa cơ sở 8 (bát phân), cơ sở 10 (thập phân) và cơ sở 16 (thập lục phân).
HalosGhost

3
Arrrg. Mỗi căn cứ là căn cứ 10! stale.soup.io/post/114652207/every-base-is-base-10
woliveirajr

4

Hệ thập lục phân là gì

Hệ thập lục phân là hệ thống đánh số cơ sở 16 sử dụng 16 chữ số ( 0123456789ABCDEF), trái ngược với hệ nhị phân sử dụng 2 ( 01) hoặc thập phân sử dụng 10 (0-9). Vì chỉ có 10 chữ số (trong hệ thống của chúng tôi), nên các chữ cái từ A đến F được sử dụng để mô tả "chữ số 10", "chữ số # 11", v.v.

tại sao nó được sử dụng nhiều trong điện toán

16 là lũy thừa của 2, giúp dễ dàng chuyển đổi số thập lục phân thành số nhị phân và như bạn đã lưu ý, "máy tính sử dụng 0 và 1 để lưu trữ dữ liệu". Vì mỗi chữ số lưu trữ chính xác 4 bit dữ liệu, một chữ số thập lục phân có thể được chuyển đổi thành 4 chữ số nhị phân (1 bit) rất dễ dàng và ngược lại.

| hex bin  | hex bin  |
| 0   0000 | 8   1000 |
| 1   0001 | 9   1001 |
| 2   0010 | A   1010 |
| 3   0011 | B   1011 |
| 4   0100 | C   1100 |
| 5   0101 | D   1101 |
| 6   0110 | E   1110 |
| 7   0111 | F   1111 |

tại sao chúng ta sử dụng thập lục phân

Nó làm cho nó dễ dàng hơn nhị phân để đại diện cho số lượng lớn. Chỉ cần hai chữ số thập lục phân có thể đại diện cho 256 giá trị khác nhau, như trong:

dec  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...
hex 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 ...

Bốn chữ số hex có thể đại diện cho 65536 giá trị, v.v. Hex giúp việc kiểm tra dữ liệu với một thứ gọi là hexdump dễ dàng hơn , vì các chữ cái, số và dấu chấm câu được lưu trữ ở định dạng ánh xạ mỗi ký tự thành một số trong khoảng từ 0 đến 256 (được gọi là ASCII hoặc đôi khi sử dụng các bảng mã khác). Hơn nữa, nhiều định dạng tệp khác (như PNG) được tùy chỉnh sao cho mỗi phần thông tin mà tệp được tạo thành chứa 256 bit.

Tóm lại, 16 là lũy thừa của 2 và 256 là lũy thừa của 16. Điều này làm cho nó trở thành một cách hay để biểu diễn cả số nhị phân và văn bản hoặc dữ liệu khác.


2

Hệ thập lục phân là gì?

Nếu bạn có một số abcd thì trong này tương đương với ((a * + b) + c) + d. Vì vậy, nó giống như:

  • abcd (nhị phân) = ((a * 2 + b) * 2 + c) * 2 + d
  • abcd (bát phân) = ((a * 8 + b) * 8 + c) * 8 + d
  • abcd (thập phân) = ((a * 10 + b) * 10 + c) * 10 + d
  • abcd (thập lục phân) = ((a * 16 + b) * 16 + c) * 16 + d

Trong hệ thống thập lục phân, bạn cần 16 chữ số, nhưng chúng tôi chỉ có mười chữ số khả dụng (0..9). Vì vậy, đối với 6 chữ số còn thiếu, các ký tự A..F được sử dụng với A = 10, ..., F = 15.

Tất nhiên bạn cũng có thể nghĩ về nhiều hệ thống số khác, ví dụ với cơ sở 5 hoặc 7.

Để tính toán với các con số, không quan trọng bạn đang sử dụng cơ sở nào. Bạn có thể thêm và nhân trong hệ thống nhị phân, bạn có thể làm điều đó trong hệ thập phân và bạn có thể làm điều đó trong hệ thập lục phân. Chúng tôi được sử dụng để tính toán trong hệ thống thập phân, máy tính làm điều đó trong hệ thống nhị phân.

Tại sao hệ thập lục phân được sử dụng rất nhiều trong điện toán?

Như đã nói ở trên, việc bạn đưa ra một số nào không quan trọng. Số cơ bản là như nhau, chỉ có đại diện thay đổi. Máy tính sẽ luôn lưu trữ và sử dụng (ví dụ tính toán với) số nhị phân.

Vậy tại sao các lập trình viên (như tôi) sử dụng các hệ thống số khác nhau? Có hai lý do để chọn một hệ thống số dựa trên sức mạnh là 2. Thứ nhất là độ ngắn và thứ hai là một cái nhìn tốt về các bit được đặt.

Ngắn

Nếu tôi có một hàm đang ghi nội dung của bộ đệm vào bàn điều khiển thì tôi có thể viết mã in theo số thập phân, có từ 1 đến 3 chữ số (thập phân: 0..255). Nếu tôi viết số ở định dạng nhị phân thì cuối cùng tôi sẽ có đầu ra từ 1 đến 8 chữ số (nhị phân: 0..11111111). Tôi cũng có thể sử dụng hệ thống bát phân và kết thúc với 1 đến 3 chữ số (bát phân: 0..377) hoặc thập lục phân với 1 đến 2 chữ số (thập lục phân: 0..ff).

Điều này chỉ dành cho một byte. Bây giờ hãy giả sử bạn muốn viết một số 32 bit:

  • nhị phân: 0..111111111111111111111111111111111
  • bát phân: 0..37777777777
  • số thập phân: 4294967295
  • thập lục phân: 0..ffffffff

Như bạn có thể thấy đầu ra thập lục phân là ngắn nhất.

Nhìn thấy các bit

Một mẫu chung để lưu trữ thông tin được đóng gói là sử dụng từng bit trong một byte riêng lẻ. Hãy lấy ví dụ về các thuộc tính tệp (xem MDSN ). Bạn muốn các thuộc tính "ẩn", "lưu trữ", "chỉ đọc", "tạm thời" và các thuộc tính khác. Bạn có thể lưu trữ mỗi thuộc tính trong một byte hoặc bạn có thể đóng gói thông tin thành một byte (hoặc nhiều byte) trong đó mỗi bit đại diện chính xác cho một thuộc tính. Nếu bạn nhìn vào dwFlagsAndAttribution trong bài viết MSDN, bạn có thể thấy Windows đang sử dụng mẫu này.

Ở lại trang MSDN, hãy lấy FILE_ATTRIBUTE_ENCRYPTEDmột ví dụ, cờ này là thập phân 16384 và thập lục phân 0x4000. "0x" hàng đầu chỉ là quy ước của lập trình viên C để đánh dấu các số thập lục phân, vì vậy chúng ta sẽ chỉ nhìn vào 4000. Khi bạn muốn biết bit nào được đặt, trước tiên bạn cần chuyển đổi 16384 sang nhị phân - không có gì bạn có thể thường làm với số học tinh thần. Nhưng hãy lấy số thập lục phân 4000. Điều này khá dễ dàng. 16 là 2 * 4, vì vậy mọi số thập lục phân chính xác là 4 bit. Do đó, chúng tôi chỉ cần chuyển đổi 4 thành nhị phân 0100 và các số 0 thành nhị phân 0000 và chúng tôi đã hoàn tất.

Thường thì nó không phải là về các bit riêng lẻ mà các lập trình viên có xu hướng sắp xếp mọi thứ thành lũy thừa của 2. Chúng tôi muốn tải các chương trình không phải đến một địa chỉ ngẫu nhiên mà là một địa chỉ có 16 bit có ý nghĩa nhỏ nhất được đặt thành 0. Bằng cách đó, nếu bạn có địa chỉ 0x12345678, bạn có thể dễ dàng thấy rằng địa chỉ này thuộc về chương trình được tải đến 0x1234 chứ không phải địa chỉ được tải đến 0x03810000.

Thích nhị phân, bát phân hay thập lục phân?

Đó là một câu hỏi về hương vị. Nếu bạn trực tiếp muốn xem các bit nhị phân có thể tốt. Đối với số dài, nhị phân có thể gây khó chịu nếu bạn phải đếm các chữ số để xem bit 23 hoặc bit 24 được đặt. Điều này dễ dàng hơn với hệ thập lục phân vì mỗi chữ số đại diện cho 4 bit, do đó bạn có ít tính liên quan hơn. Cá nhân tôi hiếm khi sử dụng bát phân. Nó rất không phổ biến.

Nhưng tại sao không sử dụng cơ sở 32?

Cơ sở 32 là sức mạnh của 2, điều này thật tuyệt. Nhưng bạn sẽ cần 32 chữ số như 0..9, A..V. Đây là nhiều chữ số cần nhớ hơn (bạn có thể dễ dàng nhận ra số 'S' nào sẽ phản hồi không?). Một cảnh báo khác là với cơ sở 32, bạn mất đi tính năng tuyệt vời rằng hai chữ số thập lục phân chính xác là một byte, rất hữu ích nếu bạn xem nội dung bộ nhớ! Ngoài ra với cơ sở 32, bạn vẫn cần 2 chữ số để biểu thị các giá trị mà một byte có thể có. Đối với giá trị 32 bit, bạn chỉ cần 7 chữ số thay vì 8 chữ số thập lục phân, nhưng đó không phải là quá nhiều để sống với những nhược điểm của hệ thống 32 cơ sở.


1

Các hệ thống biểu diễn số khác nhau được sử dụng ngày nay là (= bao gồm):
nhị phân, bát phân, thập phân và thập lục phân.
Cái nào để chọn thường phụ thuộc vào sự dễ sử dụng cho nhiệm vụ trong tay.

nhị phân được sử dụng trong các hệ thống máy tính và công nghệ kỹ thuật số nói chung, vì nó dễ dàng đại diện trong các thiết bị điện tử; các hàm cho số cơ sở 2 rất dễ xây dựng, như thể hiện bật / tắt, đúng / sai hoặc bất kỳ thông tin hai trạng thái lặp lại tương tự nào khác.

bát phân là tốt để có nếu có các nhóm gồm ba chữ số nhị phân, ví dụ như trường hợp trong cài đặt quyền trong Unix / Linux.

bỏ qua số thập phân trong giây lát, thập lục phân là tốt theo cách tương tự như bát phân nhưng đối với bốn chữ số nhị phân, và thực tế là 8 bit, một byte, khớp với hai chữ số thập lục phân. ( = câu trả lời )
Trong số này, các nhóm chẵn 8 bit trong máy tính có thể dễ dàng viết ra, trình bày và hiểu - nghĩa là; rất thuận tiện trong việc sử dụng hàng ngày khi viết phần mềm, xử lý dữ liệu (ví dụ: giá trị màu rgb trong HTML / CSS), hình thành cấu trúc dữ liệu và mọi thứ tương tự khác.

số thập phân . Người ta có thể đoán rằng hệ thống thập phân được phát triển từ thực tế là chúng ta có mười ngón tay và ngón chân. Một chữ số duy nhất đại diện cho số lượng vật phẩm được tính, một cho mỗi ngón tay lên đến mười mục tối đa.

Chúng đại diện cho các hệ thống số với cơ sở là:
2, 8, 10 và 16.

Nói chung, cơ sở cho biết bạn có thể đếm được bao nhiêu chữ số, ví dụ: nhị phân có hai, số thập phân có mười.
Vì thập lục phân có 16 mục một chữ số, hệ thống yêu cầu 16 "số", do đó sử dụng 0-9 và af (thêm 6, so với số thập phân), trong đó "a" bằng 10 và "f" bằng 15 trong hệ thập phân.

Để tiếp tục với chế độ chung: bất kỳ cơ sở 2 hoặc cao hơn cũng hoạt động cũng như mọi thứ khác, miễn là bạn có một đại diện một chữ số đẹp.

Các số trong số thập phân được hình thành bởi:

... d * 10³ + c * 10² + b * 10¹ + a * 10⁰

cho số thập phân "dcba" - với d, c, b, a, được chọn từ 0123456789

Bây giờ thay đổi điều đó thành:

... d * base³ + c * base² + b * base¹ + a * base⁰

và bạn có một hình thức tổng quát hơn cho thấy bất kỳ cơ sở 2 hoặc cao hơn "hoạt động";
vd 1/12 [5 phút] của một giờ

Lưu ý: ⁰¹²³ - siêu ký tự 0123 nếu màn hình của bạn hiển thị thứ khác


Hiện tại đây có thể là một 'sơ khai' về những gì nó thực sự có thể trở thành.
Hannu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.