Hệ thập lục phân – Wikipedia tiếng Việt

Trong toán học và trong khoa học điện toán, hệ thập lục phân (hay hệ đếm cơ số 16, tiếng Anh: hexadecimal), hoặc chỉ đơn thuần gọi là thập lục, là một hệ đếm có 16 ký tự, từ 0 đến 9 và A đến F (chữ hoa và chữ thường như nhau). Hệ thống thập lục phân hiện dùng, được công ty IBM giới thiệu với thế giới điện toán vào năm 1963. Một phiên bản cũ của hệ thống này, dùng các con số từ 0 đến 9, và các con chữ A đến F, đã được sử dụng trong máy tính Bendix G-15, ra mắt năm 1956.

Ví dụ, số thập phân 79, với biểu lộ nhị phân là 01001111, hoàn toàn có thể được viết thành 4F trong hệ thập lục phân ( 4 = 0100, F = 1111 ) .

0hex=0dec=0oct0000
1hex=1dec=1oct0001
2hex=2dec=2oct0010
3hex=3dec=3oct0011
4hex=4dec=4oct0100
5hex=5dec=5oct0101
6hex=6dec=6oct0110
7hex=7dec=7oct0111
8hex=8dec=10oct1000
9hex=9dec=11oct1001
Ahex=10dec=12oct1010
Bhex=11dec=13oct1011
Chex=12dec=14oct1100
Dhex=13dec=15oct1101
Ehex=14dec=16oct1110
Fhex=15dec=17oct1111

Chú ý trong bảng sau : hex = thập lục phân

dec = thập phân

oct = bát phân

Chính IBM đã lựa chọn tiền tố hexa, thay vì sexa của tiếng Latinh. Cái tên hexadecimal là một cái tên xa lạ, vì hexa nguyên có gốc từ hexi (έξι) trong tiếng Hy Lạp và có nghĩa là “sáu”, còn decimal lại có gốc Latinh và có nghĩa là “mười”. Có thể hexa cũng đã được lấy từ tiếng Latinh, song chữ deka của Hy Lạp lại gần với chữ decem của Latinh hơn, nên có một số ý kiến cho rằng cách đặt tên này có sự bất nhất nào đấy. Một từ cổ hơn nữa là sexidecimal nghe có vẻ Latinh nhưng không đúng (từ Latinh đúng là sedecim, có nghĩa là 16). Từ này đã được đổi vì một số người cho rằng việc dùng từ này là quá mạo hiểm, vì từ này còn có một nghĩa khác là “gốc 60”. Tuy vậy, chữ sexagesimal (gốc 60) vẫn còn giữ lại được nhóm tiền tố của nó. Trong tài liệu trước đây của máy tính Bendix, từ sexadecimal cũng có được dùng đến. Ông Steven Schwartzman có ghi lại: “Vì từ hexadecimal là một từ tương đối dài, nên nhiều khi nó được viết tắt là hex“. Từ hexadecimal – thập lục phân – là một từ bất thường, vì nó là từ ghép bởi tiết tố của hai thứ tiếng Latinh và Hy Lạp. Từ nguyên gốc Latinh phải là sexadecimal, song những kẻ tấn công máy tính (computer hackers), có thể bị gợi ý và dẫn dụ bằng từ này mà gọi tắt nó thành sex. Giáo sư và nhà khoa học máy tính Donald Knuth có chỉ ra rằng theo đúng nghĩa của từ thì tên của nó phải là senidenary, một từ gốc Latinh với nghĩa là “nhóm 16”. Những từ binary (nhị phân), ternary (tam phân) và quaternary (tứ phân) đều được tổ hợp từ gốc Latinh cả, và theo đúng nghĩa thì từ decimal (thập phân) đáng ra phải là denary (hệ mười).

Mấy năm trước đây, một hệ thống các ký tự khác của hệ thập lục phân, rõ ràng, không nhập nhèm, đã được đề cử. (Cf. Hexadecimal time)

Biểu thị số thập lục phân[sửa|sửa mã nguồn]

Một vài số lượng thập lục phân hầu hết trọn vẹn giống với những số lượng trong hệ thập phân ( kể cả so với con người và máy vi tính ). Vì thế mà chúng thường được ký hiệu theo một quy tắc nhất định .

Dưới dạng in ấn, ký hiệu của hệ thường được chỉ định bởi một hậu tố, chẳng hạn 5A316, 5A3SIXTEEN[cần dẫn nguồn], hoặc 5A3HEX.

Trong các ngôn ngữ lập trình cho máy vi tính – hầu như luôn luôn dùng văn bản đơn thuần (plain text), không hề có sự phân biệt về chữ viết trên, hoặc chữ viết dưới như trong in ấn – rất nhiều cách để đánh dấu số hệ thập lục phân đã xuất hiện. Những cách đánh dấu này còn được thấy trong chữ in, đặc biệt là những nội dung có liên quan đến một ngôn ngữ lập trình.

Một số ký dụng thường thấy trong ngôn từ :
Vì không có một lao lý thống nhất nào nên tổng thể những quy ước trên đều được dùng, đôi lúc, ngay cả trong cùng một bài viết. Song vì quy ước của chúng khá rõ ràng và khác biệt nên ít khi có những trắc trở xảy ra .

Ký hiệu thường dùng (và thường gặp) nhất là tiền tố “0x” hoặc ký hiệu viết số 16 xuống dưới (subscript-based), đều chỉ số thập lục phân. Chẳng hạn cả hai số 0x2BAD và 2BAD16 đều cùng đại diện cho số thập phân 11181 (hoặc 1118110).

Trong những thời kỳ đầu của lịch sử máy tính, sự lựa chọn những con chữ từ A đến F để thay thế cho những con số tiếp theo, chưa được chấp nhận trên toàn thế giới. Trong những năm sau 1950, một số công trình cài đặt máy tính, ưa lựa chọn cách dùng các số từ 0 đến 5, cùng với một cơ cấu mã (macron), để biểu thị giá trị từ 10 đến 15. Những người dùng máy tính Bendix thì lại dùng chữ “U” đến chữ “Z”.

Hệ thập lục phân được dùng phổ biến trong lập trình HTML và CSS (tạm dịch là Chương mục định hình tuần tự). Những lập trình này dùng bộ tam kết thập lục phân (hex triplet) biểu thị màu sắc trong các trang web, bắt đầu bằng một dấu “#”. Dấu này còn được dùng để biểu thị các số thập lục phân nửa. Khi biểu thị màu sắc với 24 bit, công thức #RRGGBB (“Đỏ, Vàng, Xanh”) được dùng để thể hiện. Trong công thức này, “RR” (tiếng Anh là “Red Red”) biểu thị phân hợp màu đỏ, “GG” (“Green Green”) biểu thị phân hợp màu vàng (đáng ra phải gọi là màu xanh lá cây, song gọi là vàng để phân biệt với phân hợp tiếp theo, màu xanh lam), và “BB” (“Blue Blue”) biểu thị phân hợp màu xanh (lam) của tổ hợp tam phần, đại diện cho sắc độ của một màu. Lấy ví dụ, một dáng màu đỏ với giá trị thập phân (238, 9, 63) được mã hóa sang hệ thập lục phân là #EE093F. Công thức này được sao chép từ tổ chức màu sắc trong hệ thống cửa sổ X (X Window System).

Hệ thập lục phân còn được dùng trong kỹ thuật máy tính trên nhiều khía cạnh chung chung khác, và là một phương pháp thông thường nhất để biểu đạt giá trị của một byte, dùng dãy các ký tự (string), mà con người ai cũng có thể đọc được. Tất cả các giá trị của một byte (bao gồm 256 giá trị) đều có thể được biểu thị bằng hệ thập lục phân. Một số người cho rằng phương pháp dùng hệ ASCII 8-bit, để biểu thị giá trị, là một phương pháp khả thi, song phương pháp này không toàn diện, vì hệ ASCII còn bao gồm những ký tự không in được (còn gọi là các ký tự điều khiển (control characters)), không thích hợp cho mục đích.

Trong những dòng liên kết nối URL, những chữ đặc biệt quan trọng hoàn toàn có thể được bộc lộ bằng cách dùng mã thập lục phân, đứng vị trí số 1 bằng dấu Xác Suất ( % ), ví dụ điển hình http://vi.wikipedia.org/wiki/Trang%20Ch%C3%ADnh .Công thức lao lý cách viết địa chỉ IPv6, đại diện thay mặt mỗi nhóm số gồm 16 bit, bằng những số thập lục phân, hòng làm cho việc đọc, và sao chép những địa chỉ dài 128 – bit được thuận tiện hơn .

Tương tự như các hệ đếm khác, hệ thập lục phân cũng có thể dùng để biểu thị phân số (vulgar fraction), song chu kỳ thập phân tái diễn (recurring digits) thường xảy ra, do số 16 chỉ có một thừa số nguyên tố:

1/ 0x1 =0x11/ 0x5 =0x0.31/ 0x9 =0x0.1C71/ 0xD =0x0.13B
1/ 0x2 =0x0.81/ 0x6 =0x0.2A1/ 0xA =0x0.191/ 0xE =0x0.1249
1/ 0x3 =0x0.51/ 0x7 =0x0.2491/ 0xB =0x0.1745D1/ 0xF =0x0.1
1/ 0x4 =0x0.41/ 0x8 =0x0.21/ 0xC =0x0.151/ 0x10 =0x0.1

Do cơ số 16 là bình phương của 4 (4²), phân số thập lục phân có chu kỳ lặp lại cá biệt, xảy ra nhiều lần hơn, so với những số thập phân. Chu kỳ thập phân xảy ra khi mẫu số, với thừa số thấp nhất (denominator in lowest terms), có một thừa số nguyên tố không thấy ở trong hàng cơ số. Trong trường hợp số thập lục phân, tất cả những phân số có mẫu số không phải là tích của một số mũ 2, sẽ tạo nên một chu kỳ thập phân tái diễn.

Hệ thập lục phân đôi khi được dùng trong các trò đùa cợt của các lập trình viên, vì một số từ có thể được tạo dựng bằng các con số thập lục phân. Một số từ này trong tiếng Anh là “dead” (chết), “beef” (thịt bò), “babe” (người yêu bé bỏng) và, với những thế tự phù hợp, từ “c0ffee” (cà phê). Trang này là một ví dụ điển hình những trò đùa cợt này. Do khả năng dễ nhận biết của những từ sắp xếp kiểu này, kiểm duyệt cài đặt (debugging setup) thường dùng chúng để ráp giá trị khởi đầu cho những tiểu tiết trong bộ nhớ, giúp các lập trình viên tìm ra những tiểu tiết chưa được ráp giá trị khởi đầu (not initialised). Một số người thêm chữ “H” vào đằng sau một con số để biểu thị con số ấy là một số thập lục phân. Quy luật này cũng đôi khi được dùng trong ngữ pháp của ngôn ngữ lập trình assembly cổ của Intel. Với đuôi “H”, người ta có thể viết những từ và câu mới, chẳng hạn 1517ADEADB17CH.

Một ví dụ nữa là con số ma (magic number) trong các tiệp của hệ thống phân bổ FAT Mach-O và các chương trình Java, con số đó là “CAFEBABE” (cô bé quán cà phê).

Cái ngân phiếu của Knuth có giá trị là một đô la trong hệ thập lục phân ( 256 xu = 162 ), tức là USD 2.56 .Bảng liệt kê sau đây chính là một trò đùa với hệ thập lục phân :

3×12=36
2×12=24
1×12=12
0x12=18

Ba hàng tiên phong là tích của số 12, trong khi hàng sau cuối ” 0x12 ” trong thập lục phân lại là 18 .

Giá trị 0xdeadbeef (“ox dead beef” – trâu chết [thành] thịt bò) đôi khi được gài vào bộ nhớ chưa được ráp giá trị khởi đầu (uninitialized memory).

Triển khai sang hệ nhị phân[sửa|sửa mã nguồn]

Khi thao tác với máy vi tính, tất cả chúng ta thường phải giải quyết và xử lý tài liệu nhị phân, tuy nhiên giải quyết và xử lý số lượng trong hệ thập lục phân lại thuận tiện hơn so với hệ nhị phân ( toàn số chỉ có 0 và 1 ) rất nhiều. Trong khi tất cả chúng ta thông thuộc với hệ thập phân hơn những hệ cơ số khác, việc đổi khác số từ hệ nhị phân sang hệ thập lục phân lại dễ hơn là việc biến chúng sang hệ thập phân, vì mỗi 1 số ít thập lục phân tương tự với 4 bit nhị phân ( 410 ) .Hãy thử xem xét việc biến hóa số 11112 sang hệ thập phân. Vì mỗi vị trí của một số lượng trong hệ nhị phân ( cơ số 2 ) chỉ được cho phép giá trị 0 hay 1 mà thôi, việc định giá trị của số lượng tại vị trí ấy, tính từ bên phải, là một việc tương đối thuận tiện :

  • 00012 = 110
  • 00102 = 210
  • 01002 = 410
  • 10002 = 810

Vì vậy :

11112 = 810 + 410 + 210 + 110
= 1510

Đây là một con tính đơn thuần, nhưng cũng đã yên cầu bốn tính cộng, trong khi với một chút ít rèn luyện, 11112 hoàn toàn có thể được chuyển thẳng sang F16 mà chỉ cần một phép tính ( xem Biểu thị số thập lục phân ). Khi số nhị phân là 1 số ít lớn, việc đổi chúng sang số thập phân là một việc dài dòng, tẻ nhạt. Khi đổi số nhị phân sang thập lục phân, tất cả chúng ta chỉ đơn thuần chia nhóm những số lượng thành những nhóm 4, chuyển mỗi nhóm 4 này thành một số ít thập lục phân, giữ nguyên vị trí tương ứng của nhóm. Ví dụ sau đây chứng tỏ việc chuyển nhị phân sang thập phân dài dòng như thế nào :

010111101011010100102 = 26214410 + 6553610 + 3276810 + 1638410 + 819210 + 204810 + 51210 + 25610 + 6410 + 1610 + 210
= 38792210

So sánh ví dụ trên với việc chuyển cùng số lượng sang hệ thập lục phân :

010111101011010100102 =010111101011010100102
=5EB5216
=5EB5216

Chúng ta cũng hoàn toàn có thể đổi thẳng từ hệ thập lục phân quay trở lại nhị phân như ví dụ trên .Dùng số bát phân cũng là một cách hữu dụng để giải quyết và xử lý tài liệu trong máy vi tính ( nhóm 3 bit thay vì nhóm 4 ) ; tuy nhiên, cái lợi lớn nhất của thập lục phân so với bát phân là, để biểu lộ một byte ( octet ), tất cả chúng ta chỉ cần đúng hai số lượng thập lục phân là đủ. Điều này có nghĩa là nếu tất cả chúng ta có giá trị của một word ( thường là 4 byte ), việc nhận ra giá trị riêng của từng byte một là một việc khá thuận tiện ; ngược lại, nếu tất cả chúng ta có giá trị của từng byte một, tất cả chúng ta cũng hoàn toàn có thể thuận tiện ráp chúng lại thành một word .

Đổi gốc từ những thông số khác[sửa|sửa mã nguồn]

Phương pháp đổi 1 số ít sang hệ thập lục phân được triển khai tựa như như chiêu thức được vận dụng cho những hệ cơ số khác, bằng cách sử dụng phép chia lấy số nguyên và số dư trong hệ cơ số nguồn. Trên triết lý, chiêu thức này hoàn toàn có thể vận dụng được với bất kỳ ( một cặp ) hệ cơ số nào. Song nói chung theo thói quen sử dụng của con người và trong kỹ thuật máy tính, giải pháp này được vận dụng với hệ thập phân và nhị phân. ( Đối với hệ nhị phân, người ta còn có những chiêu thức nhanh gọn hơn nữa. )

Chẳng hạn, nếu lấy d là số thập phân cần phải được đổi, thì dãy số hihi-1...h2h1 là những con số để biểu diễn số ở hệ thập lục phân tương ứng. Với cách tính dãy h như sau:

1. Hi:= d mod 16

(“mod” (modulus (tiếng Anh)): phép chia lấy dư, thực hiện phép chia số nguyên và lấy kết quả là số dư – chẳng hạn 17 mod 5 = 217/5 = 3, dư 2.)
2. D : = d − h i 16 { \ displaystyle { \ begin { matrix } D : = { \ frac { d-h_ { i } } { 16 } } \ end { matrix } } }{\displaystyle {\begin{matrix}D:={\frac {d-h_{i}}{16}}\end{matrix}}}
3. Nếu d == 0 thì kết quả là dãy số h); nếu không, quay trở lại bước 1.

Phần sau đây ra mắt quy trình của thuật toán trên, lập trình bằng ngôn từ JavaScript, dùng để biến bất kể 1 số ít thập phân nào sang hệ thập lục phân, hiệu quả trả về là một string ( dãy những ký tự ). Mục đích của ví dụ là minh họa quy trình của thuật toán ( hoàn toàn có thể dựa vào đấy để vận dụng cho những tác dụng giải quyết và xử lý khác ). Để vận dụng thuật toán này với tài liệu đơn cử, hoàn toàn có thể dùng những toán tử trong phép toán thao tác bit .

function toHex(d) { / * đổi khác sang hệ thập lục phân * /
 var r = d % 16;
 if(d-r= =0) {return toChar(r) ; }
 else {return toHex( (d-r)/16)+toChar(r) ; }
}

function toChar(n) 

{

/ * đổi khác số nguyên sang ký tự hoàn toàn có thể đọc và in được * / var alpha = " 0123456789ABCDEF "; return alpha.charAt(n) ; }

Cần quan tâm rằng cơ số ” 16 ” dùng ở trên hoàn toàn có thể được sửa chữa thay thế bằng bất kể cơ số nào ( ví dụ điển hình hệ nhị phân ( 2 ), tam phân ( 3 ), bát phân ( 8 ) v.v.. ). Sau đây là thủ tục được minh họa bằng ngôn từ C + + để in ra 1 số ít ở hệ bất kể tương ứng với 1 số ít thập phân nhận vào .

constalpha=" 0123456789ABCDEF ";

voidprintinbase(longd,shortb){/ / in ra số ở hệ cơ số b tương ứng với số thập phân d )
shortr=d%b;
if(d-r)printinbase(d/b,b) ;
cout< 

Phép cộng và tính nhân trong hệ thập lục phân[sửa|sửa mã nguồn]

Chúng ta hoàn toàn có thể đổi khác bằng cách phân giải giá trị của vị trí của từng số lượng ( hàng đơn vị chức năng, hàng chục, hàng trăm trong hệ thập phân ví dụ điển hình ), rồi biến mỗi giá trị ấy sang giá trị tương ứng của hệ thập lục phân, sau đó làm phép cộng hay nhân trên số lượng ấy để được hiệu quả trong hệ thập lục phân. ( khi làm tính nhân, nên có sẵn một bảng cửu chương trong hệ tương ứng ( thập lục phân ) để dễ so sánh - vì hầu hết chỉ biết bảng cửu chương trong hệ thập phân mà thôi ). ( Number system - Computer Methods in Chemical Engineering Lưu trữ 2006 - 06-19 tại Wayback Machine )Ví dụ : 12310 + 45610

 10010 + 2010 + 310
  + 40010 + 5010 + 610
 ----------------------
hay
 6416 + 1416 + 316
  + 19016 + 3216 + 616
 ----------------------
 1F416 + 4616 + 916

 11  (Nhớ)
  -------------
 1F416  50010
  + 4616  + 7010 
  916   910 
 -----   -----
 24316  57910 

Phép đổi trải qua hệ nhị phân[sửa|sửa mã nguồn]

Vì máy vi tính nói chung dùng hệ nhị phân, nên phương pháp đổi của máy thường là thông qua hệ nhị phân trước đã, sau đó dùng sự thông nối trực tiếp giữa thập lục phân và nhị phân, mà đổi sang hệ thập lục phân.

Hệ thập lục phân trong con mắt của giới báo chí truyền thông và phim ảnh[sửa|sửa mã nguồn]

Trong bộ phim hoạt họa nhiều tập The Simpsons, tập có tựa đề Treehouse of Horror VI (Ngôi nhà kinh dị trên cây VI), nhân vật Homer lọt vào tầng không gian thứ 3, (Homer³), một dãy các số thập lục phân (46 72 69 6e 6b 20 52 75 6c 65 73 21) bồng bềnh trên không tại "vùng đất của không gian 3 chiều " (3-D land). Đối chiếu những giá trị thập lục phân này trong bản ASCII cho chúng ta các con chữ mà khi ghép lại, nó biến thành một dòng chữ tiếng Anh "Frink rules!" (ngoại trừ hai dấu ngoặc kép mà thôi) - nghĩa là "Frink trị vì!" hoặc "Frink là vua".

Trong chương trình TV ReBoot, có một nhân vật với cái tên Hexadecimal ( hệ thập lục phân ) .

Liên kết ngoài[sửa|sửa mã nguồn]

Rate this post

Bài viết liên quan

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments