C/C++

Tìm Hiểu Hệ Cơ Số 16 – Hexadecimal

Giới thiệu

Đối với mỗi lập trình viên, hệ cơ số thập lục phân (hay còn gọi là hệ 16) là một khái niệm quen thuộc và không kém phần quan trọng. Trong bài viết này, tác giả sẽ cùng các bạn tìm hiểu về hệ cơ số 16, cũng như cách chuyển đổi từ các hệ cơ số khác qua hệ cơ số này và cài đặt chúng bằng ngôn ngữ lập trình.

Tiền đề bài viết

Trong những ngày đầu tiếp xúc với hệ cơ số 16, tôi đã gặp phải những khó khăn trong việc chuyển đổi giữa các hệ thống số khác nhau, đặc biệt là hệ cơ số 16. Sau một thời gian tìm hiểu thì tôi quyết định viết bài này để chia sẽ kiến thức của mình và hy vọng sẽ có ích đối với các bạn.

Đối tượng hướng đến

Bài viết này dành cho các độc giả có sự quan tâm đến hệ cơ số 16, đang gặp khó khăn trong việc tiếp xúc và sử dụng hệ đếm này. Các độc giả khác cũng có thể tham khảo để tích lũy kiến thức.

Lịch sử ra đời

Hệ cơ số thập lục phân hiện dùng, được công ty IBM :: vi.wikipedia.org/wiki/IBM giới thiệu với thế giới điện toán vào năm 1963. Tiền thân của hệ thập lục phân là hệ thống sử dụng trong máy tính Bendix G-15. Hệ thống này gồm các kí số từ 0 đến 9, và kí tự từ A đến F.

Tổng quan về hệ cơ số thập lục phân

Hệ thập lục phân tên tiếng anh là Hexadecimal, hay còn gọi là hệ 16, là một hệ đếm có 16 kí từ 0 đến 9 và A đến F (không phân biệt chữ hoa và chữ thường), với quy tắc A = 10, B = 11, C = 12, D = 13, E = 14, F = 15.

Chuyển đổi các hệ đếm qua hệ thập lục

Hệ thập phân chuyển qua hệ thập lục phân

hexadecimal_ss_01

Giải thuật

Bước 1: Thực hiện phép chia nguyên của số thập phân cần chuyển cho 16 và ghi nhớ lại kết quả dư.

Bước 2: Nếu thương số của phép chia khác 0, thì tiếp tục lặp lại bước 1. Ngược lại chuyển qua bước 3.

Bước 3: Ghi ngược các số dư theo thứ tự ngược lại.

Ví dụ

Ở đây tôi sẽ thực hiện một ví dụ chuyển số : 923(10) = ?(16)

Lần 1: 923/16 được 57 dư 11 (tương đương với B trong hexa)

Lần 2: 57/16 được 3 dư 9

Lần 3: 3/16 được 0 dư 3 và dừng lại.

Viết các số dư theo thứ tự ngược lại, và ta được:

Sơ đồ thực hiện

hexadecimal_ss_02

Hệ nhị phân chuyển qua hệ thập lục phân

hexadecimal_ss_03

Giải thuật

Bước 1: Nhóm 4 bits từ phía ngoài cùng bên phải của số nhị phân.

Bước 2: Chuyển đổi mỗi nhóm trên sang số thập lục tương ứng theo bảng dưới đây:

hexadecimal_ss_04

Ví dụ

Tôi sẽ thực hiện chuyển số nhị phân: 110101101010111001101010(2) = ?(16)

Bước 1: Nhóm lần lượt 4 bit từ phải sáng trái ta được:

1101 | 0110 | 1010 | 1110 | 0110 | 1010

Bước 2: chuyển mỗi nhóm 4 bits sang số thập lục ta được kết quả:

1101 | 0110 | 1010 | 1110 | 0110 | 1010

D        6         A        E         6         A

Vậy ta được 110101101010111001101010(2) = D6AE6A(16)

Hệ đếm thập lục trong C/C++

Trong C/C++ kí tự “0x” được sử dụng làm tiền tố cho các số thập lục phân, chẳng hạn “0x5A3”. Số không (0) dẫn đầu được dùng để bộ thanh lọc mã (parser) có thể trực tiếp nhận biết một con số, trong khi chữ “x” đại biểu cho chữ hexadecimal (thập lục phân). Chữ “x” trong tiền tố “0x” có thể được viết hoa (0X) hoặc viết thường (0x), song thường thấy được viết thường.

Chúng ta có thể gán giá trị cho biến ở thệ thập lục phân như sau: int a = 0x5a3;

Và xuất ra màn hình giá trị của biến a theo hệ thập lục phân: printf(“0x%x”, a);

Tương tự xuất ra màn hình theo kiểu hệ thập phân: printf(“%d”, a);

Cài đặt thuật toán chuyển đổi

Trên cơ sở giải thuật ở trên, tôi tiến hành cài đặt hàm ConvertDecToHex với hai tham số là n kiểu int, và des kiểu char* để chuyển đổi từ hệ thập phân sang hệ thập lục phân.

Cài đặt hàm ConvertDecToHex:

Thực hiện hàm main:

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.