Skip to main content
🔬 Advanced

Hexadecimal Calculator

Add, subtract, and convert hexadecimal numbers. Perform hex arithmetic and convert to decimal or binary. Free math calculator. Get instant results now.

<section class="content-section">
  <h2>Hiểu về Hệ Thập Lục Phân (Cơ số 16): Nền Tảng</h2>
  <p>Thập lục phân (hex) là một hệ thống số vị trí với cơ số 16. Nó sử dụng mười sáu ký hiệu khác nhau: các chữ số 0–9 đại diện cho giá trị từ không đến chín, và các chữ cái A–F (hoặc a–f) đại diện cho giá trị từ mười đến mười lăm. Một chữ số thập lục phân đại diện chính xác cho bốn bit nhị phân (một "nibble"), làm cho hex trở thành cách tự nhiên nhất để biểu diễn dữ liệu nhị phân ở định dạng dễ đọc cho con người.</p>
  <p>Giá trị vị trí của mỗi chữ số hex là một lũy thừa của 16. Đối với số hex 2F4:</p>
  <ul>
    <li>2 nằm ở vị trí 16² (256): 2 × 256 = 512</li>
    <li>F (15) nằm ở vị trí 16¹ (16): 15 × 16 = 240</li>
    <li>4 nằm ở vị trí 16⁰ (1): 4 × 1 = 4</li>
    <li>Tổng: 512 + 240 + 4 = <strong>756 thập phân</strong></li>
  </ul>
  <p>Chuyển đổi từ thập phân sang hex: chia liên tục cho 16 và ghi lại phần dư (chữ số bên phải trước). 756 ÷ 16 = 47 R 4; 47 ÷ 16 = 2 R 15 (F); 2 ÷ 16 = 0 R 2. Đọc phần dư từ dưới lên: 2F4₁₆ ✓. Trong hầu hết các ngôn ngữ lập trình, các số hex được tiền tố bằng <code>0x</code>: <code>0x2F4</code> = 756.</p>
</section>

<section class="content-section">
  <h2>Bảng Chuyển Đổi Hex sang Thập Phân</h2>
  <p>Tham khảo nhanh để chuyển đổi các chữ số hex đơn và các giá trị hex thông thường sang thập phân:</p>
  <table>
    <thead><tr><th>Hex</th><th>Thập Phân</th><th>Nhị Phân</th><th>Ý Nghĩa Thông Thường</th></tr></thead>
    <tbody>
      <tr><td>0x00</td><td>0</td><td>0000 0000</td><td>Byte null, false, tắt</td></tr>
      <tr><td>0x01</td><td>1</td><td>0000 0001</td><td>True, bật</td></tr>
      <tr><td>0x0A</td><td>10</td><td>0000 1010</td><td>Ký tự xuống dòng (LF)</td></tr>
      <tr><td>0x0D</td><td>13</td><td>0000 1101</td><td>Trả về xe (CR)</td></tr>
      <tr><td>0x1F</td><td>31</td><td>0001 1111</td><td>Ngăn cách đơn vị</td></tr>
      <tr><td>0x20</td><td>32</td><td>0010 0000</td><td>Ký tự khoảng trắng (ASCII)</td></tr>
      <tr><td>0x41</td><td>65</td><td>0100 0001</td><td>'A' trong ASCII</td></tr>
      <tr><td>0x61</td><td>97</td><td>0110 0001</td><td>'a' trong ASCII (chữ thường)</td></tr>
      <tr><td>0x7F</td><td>127</td><td>0111 1111</td><td>Ký tự DEL; cặp nibble tối đa có dấu</td></tr>
      <tr><td>0x80</td><td>128</td><td>1000 0000</td><td>Bit dấu được thiết lập (âm trong byte có dấu)</td></tr>
      <tr><td>0xFF</td><td>255</td><td>1111 1111</td><td>Byte không dấu tối đa; tất cả các bit được thiết lập</td></tr>
      <tr><td>0x100</td><td>256</td><td>1 0000 0000</td><td>Nhiều hơn một byte tối đa</td></tr>
      <tr><td>0xFFFF</td><td>65,535</td><td>16 số một</td><td>Giá trị không dấu 16-bit tối đa</td></tr>
      <tr><td>0xFFFFFF</td><td>16,777,215</td><td>24 số một</td><td>Tối đa 24-bit (16M màu)</td></tr>
    </tbody>
  </table>
  <p>Mối quan hệ giữa hex và nhị phân là trực tiếp: mỗi chữ số hex tương ứng với chính xác 4 bit. A = 1010, B = 1011, C = 1100, D = 1101, E = 1110, F = 1111. Chuyển đổi 0xAB sang nhị phân: A=1010, B=1011 → 10101011₂ = 171₁₀.</p>
</section>

<section class="content-section">
  <h2>Số Học Hex: Cộng, Trừ, Nhân</h2>
  <p>Số học thập lục phân tuân theo các quy tắc giống như số học thập phân nhưng chuyển và mượn ở cơ số 16 thay vì 10. Hiểu số học hex là cần thiết cho lập trình hợp ngữ, hệ thống nhúng và đọc đầu ra của trình biên dịch.</p>
  <p><strong>Ví dụ cộng:</strong> 3A + 27. Đơn vị: A + 7 = 10 + 7 = 17 = 1×16 + 1 → viết 1, chuyển 1. Hàng chục: 3 + 2 + 1 (chuyển) = 6. Kết quả: 61₁₆ = 97₁₀. Kiểm tra: 58 + 39 = 97 ✓.</p>
  <p><strong>Ví dụ trừ:</strong> C3 − 5F. Đơn vị: 3 &lt; F (15), nên mượn: 3 + 16 − 15 = 4, và chuyển 1 sang cột tiếp theo. Hàng chục: C (12) − 5 − 1 (mượn) = 6. Kết quả: 64₁₆ = 100₁₀. Kiểm tra: 195 − 95 = 100 ✓.</p>
  <p><strong>Ví dụ nhân:</strong> 1A × 3. A × 3 = 30 = 1E₁₆ (viết E, chuyển 1). 1 × 3 + 1 = 4. Kết quả: 4E₁₆ = 78₁₀. Kiểm tra: 26 × 3 = 78 ✓.</p>
  <p>Đối với các phép tính hex phức tạp, chuyển đổi sang thập phân, tính toán và chuyển đổi lại thường đáng tin cậy hơn trừ khi bạn đã thực hành sâu sắc. Tuy nhiên, hiểu số học hex giúp xây dựng trực giác về bố cục bộ nhớ, thanh ghi CPU và biểu diễn dữ liệu.</p>
</section>

<section class="content-section">
  <h2>Hex trong Thiết Kế Web: Mã Màu</h2>
  <p>Mã màu HTML và CSS là một trong những ứng dụng dễ thấy nhất của thập lục phân ngoài lập trình. Màu sắc được biểu diễn dưới dạng #RRGGBB, trong đó mỗi kênh có phạm vi từ 00 (0 cường độ) đến FF (255 = cường độ đầy đủ). Điều này cho phép 256³ = 16,777,216 màu có thể có.</p>
  <table>
    <thead><tr><th>Màu Hex</th><th>Đỏ</th><th>Xanh Lá</th><th>Xanh Dương</th><th>Tên Màu</th></tr></thead>
    <tbody>
      <tr><td>#FF0000</td><td>255</td><td>0</td><td>0</td><td>Đỏ thuần</td></tr>
      <tr><td>#00FF00</td><td>0</td><td>255</td><td>0</td><td>Xanh lá thuần (lime)</td></tr>
      <tr><td>#0000FF</td><td>0</td><td>0</td><td>255</td><td>Xanh dương thuần</td></tr>
      <tr><td>#FFFF00</td><td>255</td><td>255</td><td>0</td><td>Vàng</td></tr>
      <tr><td>#FF00FF</td><td>255</td><td>0</td><td>255</td><td>Magenta</td></tr>
      <tr><td>#00FFFF</td><td>0</td><td>255</td><td>255</td><td>Cyan</td></tr>
      <tr><td>#FFFFFF</td><td>255</td><td>255</td><td>255</td><td>Trắng</td></tr>
      <tr><td>#000000</td><td>0</td><td>0</td><td>0</td><td>Đen</td></tr>
      <tr><td>#808080</td><td>128</td><td>128</td><td>128</td><td>Xám trung bình</td></tr>
      <tr><td>#FF5733</td><td>255</td><td>87</td><td>51</td><td>Cam đỏ rực rỡ</td></tr>
    </tbody>
  </table>
  <p>CSS cũng hỗ trợ màu hex 4 chữ số (#RGBA) và 8 chữ số (#RRGGBBAA) trong đó AA là kênh alpha (00 = trong suốt, FF = mờ đục). Màu dạng ngắn (#RGB) mở rộng bằng cách lặp lại mỗi chữ số: #F3A = #FF33AA.</p>
  <p>Nhà thiết kế web thường điều chỉnh màu sắc bằng cách thay đổi giá trị hex. Thêm vào kênh đỏ làm cho màu sắc ấm hơn; trừ đi làm cho chúng mát hơn. Màu hex có giá trị R, G và B bằng nhau luôn tạo ra các sắc thái của màu xám. Một màu như #7F7F7F chính xác là 50% xám (127 trên 255 trên mỗi kênh).</p>
</section>

<section class="content-section">
  <h2>Hex trong Lập Trình: Địa Chỉ Bộ Nhớ và Thao Tác Bit</h2>
  <p>Trong lập trình hệ thống, hex là ngôn ngữ tự nhiên cho địa chỉ bộ nhớ, cờ bit và thanh ghi phần cứng. Mọi lập trình viên làm việc với C, C++, hợp ngữ hoặc hệ thống nhúng đều gặp hex liên tục.</p>
  <p><strong>Địa chỉ bộ nhớ:</strong> Trên hệ thống 32-bit, địa chỉ dao động từ 0x00000000 đến 0xFFFFFFFF (4 GB). Các phạm vi địa chỉ phổ biến: 0x00000000–0x00FFFFFF (bộ nhớ thấp), 0x7FFFFFFF (số nguyên có dấu dương tối đa 32-bit), 0x80000000 (bắt đầu không gian âm trong diễn giải có dấu), 0xFFFFFFFF (không dấu tối đa 32-bit). Trên hệ thống 64-bit, không gian người dùng thường chiếm 0x0000000000000000–0x00007FFFFFFFFFFF.</p>
  <p><strong>Thao tác bit với mặt nạ hex:</strong> Các thao tác bit được biểu diễn tự nhiên trong hex vì chúng phù hợp với ranh giới nibble.</p>
  <table>
    <thead><tr><th>Thao Tác</th><th>Biểu Thức</th><th>Hiệu Ứng</th></tr></thead>
    <tbody>
      <tr><td>Thiết lập bit 3</td><td>x |= 0x08</td><td>Buộc bit 3 thành 1, giữ nguyên các bit khác</td></tr>
      <tr><td>Xóa bit 3</td><td>x &amp;= ~0x08</td><td>Buộc bit 3 thành 0, giữ nguyên các bit khác</td></tr>
      <tr><td>Chuyển đổi bit 3</td><td>x ^= 0x08</td><td>Đảo bit 3, giữ nguyên các bit khác</td></tr>
      <tr><td>Kiểm tra bit 3</td><td>(x &amp; 0x08) != 0</td><td>Kiểm tra xem bit 3 có được thiết lập không</td></tr>
      <tr><td>Trích xuất nibble thấp</td><td>x &amp; 0x0F</td><td>Lấy 4 bit thấp hơn</td></tr>
      <tr><td>Trích xuất nibble cao</td><td>(x &gt;&gt; 4) &amp; 0x0F</td><td>Lấy 4 bit cao hơn của byte</td></tr>
    </tbody>
  </table>
  <p><strong>Hằng số hex nổi tiếng:</strong> Lập trình viên đã tạo ra các hằng số đáng nhớ để gỡ lỗi và khởi tạo: 0xDEADBEEF (dùng để đánh dấu bộ nhớ chưa khởi tạo trong các hệ thống IBM cũ), 0xCAFEBABE (số ma thuật tệp lớp Java), 0xFEEDFACE (số ma thuật định dạng nhị phân Mach-O), 0x0BADF00D (điểm đánh dấu gỡ lỗi bộ nhớ), 0xDEADC0DE (dùng trong phát hiện sự cố iOS). Những hằng số này xuất hiện rõ ràng trong các bản ghi hex, giúp chúng dễ dàng phát hiện trong quá trình gỡ lỗi.</p>
</section>

<section class="content-section">
  <h2>Chữ Ký Định Dạng Tệp và Phân Tích Hex</h2>
  <p>Mỗi định dạng tệp có một chuỗi byte đặc trưng ở đầu gọi là "số ma thuật" hoặc chữ ký tệp. Các trình chỉnh sửa hex và công cụ pháp y kỹ thuật số sử dụng các chữ ký này để xác định loại tệp bất kể phần mở rộng tệp. Biết chữ ký tệp là cần thiết cho khôi phục dữ liệu, phân tích phần mềm độc hại và pháp y kỹ thuật số.</p>
  <table>
    <thead><tr><th>Loại Tệp</th><th>Chữ Ký Hex (các byte đầu tiên)</th><th>Biểu Diễn ASCII</th></tr></thead>
    <tbody>
      <tr><td>Ảnh JPEG</td><td>FF D8 FF</td><td>ÿØÿ</td></tr>
      <tr><td>Ảnh PNG</td><td>89 50 4E 47 0D 0A 1A 0A</td><td>.PNG....</td></tr>
      <tr><td>Tài liệu PDF</td><td>25 50 44 46</td><td>%PDF</td></tr>
      <tr><td>Lưu trữ ZIP</td><td>50 4B 03 04</td><td>PK..</td></tr>
      <tr><td>Ảnh GIF</td><td>47 49 46 38</td><td>GIF8</td></tr>
      <tr><td>Tệp thực thi ELF (Linux)</td><td>7F 45 4C 46</td><td>.ELF</td></tr>
      <tr><td>Tệp thực thi PE của Windows</td><td>4D 5A</td><td>MZ</td></tr>
      <tr><td>Âm thanh MP3</td><td>FF FB hoặc 49 44 33</td><td>ÿû hoặc ID3</td></tr>
      <tr><td>Cơ sở dữ liệu SQLite</td><td>53 51 4C 69 74 65</td><td>SQLite</td></tr>
    </tbody>
  </table>
  <p>Các chuyên gia bảo mật sử dụng hex để kiểm tra các tệp nhị phân mà không tin tưởng vào phần mở rộng tệp. Một tệp có tên "document.pdf" bắt đầu bằng 4D 5A thực sự là một tệp thực thi Windows — một thủ thuật phần mềm độc hại phổ biến. Phân tích hex của các gói mạng tiết lộ cấu trúc giao thức, tiêu đề mã hóa và các lỗ hổng tiềm ẩn.</p>
</section>

<section class="content-section">
  <h2>So Sánh Cơ Số Số: Thập Phân, Nhị Phân, Bát Phân, Hex</h2>
  <p>Máy tính sử dụng các cơ số số khác nhau cho các mục đích khác nhau. Hiểu cách chúng liên quan giúp trong việc đọc tài liệu kỹ thuật, gỡ lỗi và lập trình hệ thống.</p>
  <table>
    <thead><tr><th>Thập Phân</th><th>Nhị Phân (cơ số 2)</th><th>Bát Phân (cơ số 8)</th><th>Hex (cơ số 16)</th></tr></thead>
    <tbody>
      <tr><td>0</td><td>0000</td><td>0</td><td>0</td></tr>
      <tr><td>8</td><td>1000</td><td>10</td><td>8</td></tr>
      <tr><td>10</td><td>1010</td><td>12</td><td>A</td></tr>
      <tr><td>15</td><td>1111</td><td>17</td><td>F</td></tr>
      <tr><td>16</td><td>0001 0000</td><td>20</td><td>10</td></tr>
      <tr><td>64</td><td>0100 0000</td><td>100</td><td>40</td></tr>
      <tr><td>128</td><td>1000 0000</td><td>200</td><td>80</td></tr>
      <tr><td>255</td><td>1111 1111</td><td>377</td><td>FF</td></tr>
      <tr><td>256</td><td>1 0000 0000</td><td>400</td><td>100</td></tr>
      <tr><td>1024</td><td>100 0000 0000</td><td>2000</td><td>400</td></tr>
    </tbody>
  </table>
  <p>Bát phân (cơ số 8) từng phổ biến trong máy tính (nó xuất hiện trong quyền truy cập tệp Unix: chmod 755 = 111 101 101 trong nhị phân = rwxr-xr-x). Hex phần lớn đã thay thế bát phân cho hầu hết các mục đích vì 4 bit mỗi chữ số (hex) phù hợp hơn với kiến trúc hiện đại 8-bit, 16-bit, 32-bit và 64-bit so với 3 bit mỗi chữ số (bát phân).</p>
</section>

<section class="content-section faq-section">
  <h2>Câu Hỏi Thường Gặp</h2>
  <details>
    <summary>Làm thế nào để chuyển đổi nhanh giữa hex và nhị phân?</summary>
    <p>Mỗi chữ số hex tương ứng với chính xác 4 bit nhị phân: 0=0000, 1=0001, 2=0010, 3=0011, 4=0100, 5=0101, 6=0110, 7=0111, 8=1000, 9=1001, A=1010, B=1011, C=1100, D=1101, E=1110, F=1111. Để chuyển đổi 0xB7: B=1011, 7=0111 → 10110111₂. Để chuyển đổi 11001010₂: chia thành các nibble: 1100=C, 1010=A → 0xCA.</p>
  </details>
  <details>
    <summary>Tại sao CSS sử dụng màu hex?</summary>
    <p>CSS sử dụng hex vì mỗi kênh RGB (0-255) vừa vặn chính xác trong 2 chữ số hex (00-FF). Định dạng #RRGGBB là gọn gàng, không mơ hồ và ánh xạ trực tiếp đến mô hình màu 24-bit được sử dụng bởi phần cứng hiển thị. HTML đã áp dụng màu hex từ những năm 1990 từ định nghĩa màu X11, và quy ước này đã trở thành tiêu chuẩn kể từ đó.</p>
  </details>
  <details>
    <summary>0xFF bằng bao nhiêu trong thập phân?</summary>
    <p>0xFF = 15×16 + 15 = 240 + 15 = 255. Trong nhị phân, FF = 1111 1111, nghĩa là tất cả 8 bit đều được thiết lập. 255 là giá trị tối đa của một byte không dấu (uint8), cường độ tối đa cho mỗi kênh màu RGB, và xuất hiện liên tục trong mạng (255.255.255.255 là địa chỉ quảng bá) và máy tính.</p>
  </details>
  <details>
    <summary>Sự khác biệt giữa 0x1F và 0xF1 là gì?</summary>
    <p>Đây là những số khác nhau với cùng chữ số theo thứ tự khác nhau. 0x1F = 1×16 + 15 = 31 thập phân. 0xF1 = 15×16 + 1 = 241 thập phân. Trong nhị phân: 0x1F = 0001 1111; 0xF1 = 1111 0001. Giá trị vị trí quan trọng, giống như 19 ≠ 91 trong thập phân.</p>
  </details>
  <details>
    <summary>Cần bao nhiêu chữ số hex để biểu diễn một số 32-bit?</summary>
    <p>Chính xác 8 chữ số hex (vì 16⁸ = 2³², bao phủ tất cả các giá trị 32-bit từ 0x00000000 đến 0xFFFFFFFF). Địa chỉ bộ nhớ trên hệ thống 32-bit được hiển thị dưới dạng các số hex 8 chữ số. Đối với các số 64-bit, bạn cần 16 chữ số hex (0x0000000000000000 đến 0xFFFFFFFFFFFFFFFF).</p>
  </details>
  <details>
    <summary>Tiền tố "0x" có nghĩa là gì trong các số hex?</summary>
    <p>Tiền tố "0x" là một quy ước ký hiệu được sử dụng trong C và hầu hết các ngôn ngữ lập trình để chỉ ra rằng số tiếp theo là thập lục phân. "0x" đại diện cho "hex" (chữ 'x' gợi ý thập lục phân). Các ký hiệu khác: 'h' đứng sau trong hợp ngữ (FFh), '#' đứng trước trong CSS và một số ngữ cảnh (#FF0000), và tiền tố $ trong một số ngôn ngữ cũ ($FF).</p>
  </details>
  <details>
    <summary>Hex được sử dụng như thế nào trong địa chỉ IP?</summary>
    <p>Địa chỉ IPv4 (ví dụ: 192.168.1.1) có thể được biểu diễn trong hex: mỗi octet trong hex. 192.168.1.1 = 0xC0 0xA8 0x01 0x01 = 0xC0A80101. Địa chỉ IPv6 đã được viết bằng hex: 2001:0db8:85a3:0000:0000:8a2e:0370:7334. Điều này làm cho việc thao tác địa chỉ IPv6 dễ dàng hơn nhiều với số học hex.</p>
  </details>
  <details>
    <summary>Trình chỉnh sửa hex là gì và khi nào tôi nên sử dụng nó?</summary>
    <p>Một trình chỉnh sửa hex hiển thị và chỉnh sửa các tệp dưới dạng byte thô trong thập lục phân. Các mục đích sử dụng phổ biến: kiểm tra chữ ký định dạng tệp để xác định loại tệp, chỉnh sửa tệp lưu trò chơi nhị phân, kỹ thuật đảo ngược phần mềm, phân tích gói mạng, khôi phục dữ liệu từ các tệp bị hỏng và pháp y kỹ thuật số. Các trình chỉnh sửa hex phổ biến bao gồm HxD (Windows), hex fiend (Mac), và xxd (công cụ dòng lệnh Unix).</p>
  </details>
  <details>
    <summary>Tại sao thập lục phân được sử dụng thay vì thập phân trong máy tính?</summary>
    <p>Bởi vì máy tính hoạt động trong nhị phân (cơ số 2), và 16 = 2⁴ — hex phù hợp hoàn hảo với nhị phân. Một chữ số hex = 4 bit, hai chữ số hex = 1 byte (8 bit), bốn chữ số hex = 16 bit, tám chữ số hex = 32 bit. Thập phân không có sự tương ứng sạch sẽ như vậy với các lũy thừa của 2, làm cho hex tự nhiên hơn nhiều để biểu diễn dữ liệu nhị phân một cách gọn gàng.</p>
  </details>
  <details>
    <summary>Làm thế nào để chuyển đổi một màu hex sang giá trị RGB?</summary>
    <p>Chia màu hex 6 chữ số thành ba nhóm 2 chữ số: #RRGGBB. Chuyển đổi mỗi nhóm từ hex sang thập phân. Ví dụ: #4A90E2 → R=0x4A=74, G=0x90=144, B=0xE2=226. Vì vậy, màu này là rgb(74, 144, 226) — một màu xanh trung bình. Để đảo ngược: chuyển đổi mỗi giá trị thập phân sang hex 2 chữ số và nối lại: rgb(255, 87, 51) → #FF5733.</p>
  </details>
</section>

<section class="content-section">
  <h2>Thập Lục Phân trong Mạng và Giao Thức</h2>
  <p>Mạng máy tính sử dụng thập lục phân rộng rãi. Địa chỉ MAC — các định danh phần cứng cho giao diện mạng — được viết dưới dạng 6 byte hex cách nhau bằng dấu hai chấm hoặc dấu gạch nối: ví dụ, <code>00:1A:2B:3C:4D:5E</code>. Ba byte đầu tiên (00:1A:2B) xác định nhà sản xuất (Mã định danh duy nhất của tổ chức, OUI), trong khi ba byte cuối (3C:4D:5E) xác định thiết bị cụ thể.</p>
  <p>Địa chỉ IPv6 là 128 bit được biểu diễn dưới dạng 8 nhóm 4 chữ số hex: <code>2001:0DB8:AC10:FE01:0000:0000:0000:0000</code>. Các số không dẫn đầu trong các nhóm có thể bị bỏ qua và các nhóm toàn số không liên tiếp được nén bằng "::", cho <code>2001:DB8:AC10:FE01::</code>. Hiểu hex là cần thiết để đọc địa chỉ IPv6, mặt nạ mạng con và bảng định tuyến.</p>
  <p>Các khung Ethernet, gói IP, đoạn TCP — tất cả đều có các trường được biểu diễn bằng hex trong các công cụ phân tích mạng như Wireshark. Một gói TCP SYN hiển thị trường cờ là 0x002 (chỉ có bit SYN được thiết lập); một SYN-ACK hiển thị 0x012 (các bit SYN + ACK được thiết lập). Đọc các giá trị hex này trực tiếp từ các bản ghi gói là một kỹ năng cơ bản trong việc khắc phục sự cố mạng.</p>
</section>

<section class="content-section">
  <h2>Unicode và Hex: Mã Hóa Ký Tự</h2>
  <p>Unicode, tiêu chuẩn mã hóa ký tự toàn cầu, gán cho mỗi ký tự một điểm mã được biểu diễn bằng hex. Mặt phẳng đa ngôn ngữ cơ bản trải dài từ U+0000 đến U+FFFF. Ví dụ:</p>
  <table>
    <thead><tr><th>Ký Tự</th><th>Điểm Mã Unicode</th><th>Mã Hóa UTF-8 (hex)</th><th>Mô Tả</th></tr></thead>
    <tbody>
      <tr><td>A</td><td>U+0041</td><td>41</td><td>Chữ cái hoa Latin A</td></tr>
      <tr><td>α</td><td>U+03B1</td><td>CE B1</td><td>Chữ cái nhỏ Hy Lạp alpha</td></tr>
      <tr><td>€</td><td>U+20AC</td><td>E2 82 AC</td><td>Ký hiệu Euro</td></tr>
      <tr><td>中</td><td>U+4E2D</td><td>E4 B8 AD</td><td>Ký tự Trung Quốc "trung"</td></tr>
      <tr><td>😀</td><td>U+1F600</td><td>F0 9F 98 80</td><td>Biểu tượng mặt cười</td></tr>
      <tr><td>©</td><td>U+00A9</td><td>C2 A9</td><td>Ký hiệu bản quyền</td></tr>
    </tbody>
  </table>
  <p>UTF-8 mã hóa các ký tự ASCII (U+0000 đến U+007F) trong 1 byte giống hệt với giá trị ASCII của chúng. Các ký tự U+0080 đến U+07FF sử dụng 2 byte, U+0800 đến U+FFFF sử dụng 3 byte, và các ký tự vượt quá U+FFFF (như hầu hết các biểu tượng cảm xúc) sử dụng 4 byte. Mã hóa độ dài biến đổi này, tất cả được biểu diễn bằng hex, là lý do tại sao hiểu hex giúp ích khi gỡ lỗi các vấn đề mã hóa văn bản trong các ứng dụng web.</p>
</section>

<section class="related-section">
    <h2>Các Máy Tính Liên Quan</h2>
    <ul class="related-grid">
          <li><a href="/percentage-calculator/">Máy Tính Phần Trăm</a></li>
          <li><a href="/fraction-calculator/">Máy Tính Phân Số</a></li>
          <li><a href="/square-root-calculator/">Máy Tính Căn Bậc Hai</a></li>
          <li><a href="/standard-deviation-calculator/">Máy Tính Độ Lệch Chuẩn</a></li>
          <li><a href="/scientific-notation-calculator/">Máy Tính Ký Hiệu Khoa Học</a></li>
    </ul>
  </section>
  <script>
    document.getElementById('calcBtn').addEventListener('click', () => {
      try {
        const a = document.getElementById('a').value;
        const b = document.getElementById('b').value;
        
        if (!a || !b) {
          const el = document.getElementById('result');
          el.innerHTML = 'Vui lòng điền vào tất cả các trường với các số hợp lệ.';
          el.style.display = 'block';
          return;
        }
        const result = (() => { const da=parseInt(a,16); const db=parseInt(b,16); if(isNaN(da)||isNaN(db)) return 'Lỗi: Nhập các số hex hợp lệ (0-9, A-F)'; const sum=da+db; const diff=da-db; return `A (thập phân) = ${da}<br>B (thập phân) = ${db}<br>A + B = ${sum} (hex: ${sum.toString(16).toUpperCase()})<br>A − B = ${diff} (hex: ${diff<0?'-':''}${Math.abs(diff).toString(16).toUpperCase()})`; })();
        const el = document.getElementById('result');
        el.innerHTML = result;
        el.style.display = 'block';
        el.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
      } catch(e) {
        document.getElementById('result').innerHTML = 'Vui lòng điền vào tất cả các trường với các số hợp lệ.';
        document.getElementById('result').style.display = 'block';
      }
    });
    // Enter key triggers calc
    document.get