Hệ đếm

Để "đếm" (sau đó là tính toán, ví dụ: cộng, trừ, nhân, chia,...), ta phải thống nhất sử dụng một hệ đếm nào đó. Trong mỗi trường hợp có thể sẽ sử dụng một hệ đếm khác nhau. Có nhiều loại hệ đếm: hệ 10 (thập phân), hệ 2 (nhị phân), hệ 4 (tứ phân), hệ 8 (bát phân), hệ 16 (thập lục phân),... Có lẽ các hệ thường gặp nhất là hệ 10, hệ 2 và hệ 16.

Từ xưa, do mỗi lần đếm (ví dụ: 7 con gà) thì tổ tiên chúng ta thường sử dụng số ngón tay tương ứng. Do vậy, con người đã sử dụng hệ 10 (thập phân) một cách tự nhiên.

Tuy nhiên, trong máy tính các linh kiện chỉ có 2 trạng thái là tắt (off) và đỏ (on) nên để cho máy hiểu ta phải sử dụng hệ 2 (nhị phân).

Trong thế giới đồ họa, để biểu diễn màu người ta thường sử dụng hệ RGB, nghĩa là một màu nào đó sẽ là tổ hợp của 3 màu cơ bản Red (đỏ), Green (xanh lá cây) và Blue (xanh da trời). Mỗi thành phần màu này (ví dụ: Red) thường có 256 cấp độ xám (ví dụ: 0 là tối, 100 là đỏ thẩm, 255 là đỏ tươi). Do đó, người ta thích sử dụng hệ 16 để biểu diễn màu: mỗi màu là một số gồm 6 chữ số ở hệ 16, hai chữ số đầu tiên tương ứng với màu R, hai chữ số tiếp theo tương ứng với màu G và hai chữ số cuối cùng tương ứng với màu B. Ví dụ: FFFF00 sẽ tương ứng với màu vàng tươi.

A. Chuyển đổi cơ số

1. Hệ 2, 4, 8, 16 → Hệ 10

Cách 1 (tổng quát)

Áp dụng công thức dưới đây:

Cách 2 (tính nhẩm nhanh, chuyển từ hệ 2 sang hệ 10)

Đây chỉ là cái mẹo để tính cho nhanh chứ thực ra nó cũng là cách 1 ở trên. Chú ý: cơ số bây giờ là 2, nên các chữ số ai chỉ có thể là 0 hoặc 1. Do vậy chỉ cần nhớ giá trị bi tương ứng (tạm gọi là trọng số).

Như ví dụ trên, để tính 101101(2) = ?(10), trước hết ta bỏ qua các giá trị bằng 0 là a1, a4. Sau đó chỉ việc cộng trọng số tại các vị trí mà ai khác 0. Cụ thể ở đây ta có a0, a2, a3, a5 các giá trị bằng 1, do vậy ta có 1+4+8+32 = 45, nghĩa là 101101(2) = 45(10).

2. Hệ 10 → Hệ 2 (số nguyên)

Cách 1 (máy móc)

Cứ lần lượt chia cho 2 đến khi bằng 0. Sau mỗi lần chia, ghi nhớ số dư. Đến khi bằng 0 thì nếu ghi các số dư theo chiều ngược lại sẽ được số nhị phân tương ứng. Như ví dụ ở hình dưới, 11(10) = ?(2)

Lấy các số dư và ghi theo chiều ngược lại ta được 1011, nghĩa là 11(10) = 1011(2)

Cách 2 (tính nhẩm nhanh)

Cũng dựa vào trọng số của từng chữ số. Vấn đề lúc này sẽ là tìm cách phân tích số cần chuyển (như trong ví dụ trên là 11) thành tổng của các trọng số. Ta dễ thấy 11 = 8 + 2 + 1. Dãy số nhị phân tương ứng sẽ có giá trị 1 tại các trọng số có tham gia vào phép tổng, các vị trí còn lại sẽ có giá trị 0.

11 = 8 + 2 + 1 → a0 = a1 = a3 = 1 → 11(10) = 1011(2)

3. Hệ 10 → Hệ 2 (số thực)

Khi chuyển đổi một số thực ở hệ 10 sang hệ 2 thì phần nguyên được chuyển như mục 2 ở trên 9 (lần lượt chia cho 2 và lấy các phần dư ghi theo chiều ngược lại), còn phần thập phân thì làm theo cách dưới đây. Nôm na là làm theo cách ngược lại: lần lượt nhân 2 và lấy các phần nguyên ghi theo chiều thuận.

Kết quả sẽ là các chữ số phần nguyên của kết quả trong quá trình nhân 2 (theo thứ tự từ trên xuống dưới).

3. Hệ 16 → Hệ 2

Do một chữ số ở hệ thập phân tương ứng với 4 chữ số ở hệ nhị phân (24=16) nên việc chuyển một số ở hệ thập lục phân sang hệ nhị phân tương đối đơn giản: cứ chuyển lần lượt từng chữ số từ hệ 16 sang hệ 2 theo bảng tương ứng sau:

0 → 0000 4 → 0100 8 → 1000 C → 1100
1 → 0001 5 → 0101 9 → 1001 D → 1101
2 → 0002 6 → 0110 A → 1010 E → 1110
3 → 0003 7 → 0111 B → 1011 F → 1111

Ví dụ: 2A4F(16) = ?(2). Ta cứ lần lượt chuyển từng chữ số sang hệ 2 theo bảng trên:

2 0010
A 1010
4 0100
F 1111
Như vậy, 2A4F(16) = 0010101001001111(2)

5. Hệ 2 → Hệ 16

Tương tự như khi chuyển từ hệ 16 sang hệ 2 nhưng làm ngược lại: theo thứ tự từ phải sang trái lần lượt nhóm từ 4 chữ số ở hệ 2 và chuyển sang hệ 16. Nhóm cuối cùng nếu không đủ 4 chữ số thì có thể thêm các chữ số 0 vào bên trái.  Ví dụ: 10100100101101(2) = ?(16). Ta sẽ được 4 nhóm: 0010, 1001, 0010, 1101.

0010 2
1001 9
0010 2
1101 D
Như vậy, 10100100101101(2) = 292D(16)

B. Cộng trừ nhân chia

1. Cộng trừ

Cách thực hiện như đã biết với hệ thập phân, tuy nhiên cần chú ý trong bảng cộng trừ:

Với phép cộng, ở hệ 10 thì 1 + 1 = 2 nhưng ở hệ 2 thì 1 + 1 = 10 nên ta nói: 1 cộng 1 được 0 1.

Với phép trừ, do 0 không thể trừ được 1 nên đành phải điều đình: cả tôianh đều cộng thêm 1 sau đó mới trừ. Sau khi cả hai cộng thêm 1 thì số phía trên (A) trở thành 1 (vì 0 + 1 =1), phía dưới (B) trở thành 0 nhớ 1 (vì 1 + 1 = 10). Bây giờ thì 1 trừ đi 0 sẽ được 1 nhưng có nhớ 1 (nghĩa là sẽ cộng thêm 1 vào bit ngay phía bên trái của B, thể hiện trên hình là có một dấu chấm ở số phía dưới).

Sau khi tính toán thì có thể chuyển sang hệ 10 để kiểm tra nếu cảm thấy chưa yên tâm. Dưới đây là hai ví dụ khác, phức tạp hơn một tí. Chỉ cần biết cách "nh" và "mượn" chính xác là mọi việc sẽ ổn (chú ý các dấu chấm).

2. Nhân chia

Thực hiện như ở hệ 10. Dưới đây là 2 ví dụ về phép nhân:

Và 2 ví dụ về phép chia:

C. Số nguyên âm

Để biểu diễn số âm, người ta sử dụng bit trái cùng để xác định dấu: 0 là số dương, 1 là số âm. Như vậy, nếu sử dụng n bit để biểu diễn một số nguyên âm thì ta chỉ có thể biểu diễn được các số trong đoạn [-2n-1+1,2n-1]. Ví dụ, một số nhị phân độ dài 4 bit có thể biểu diễn các số nguyên trong đoạn [0,15] (chú ý: 15=24-1), tuy nhiên cũng với 4 bit sẽ chỉ biểu diễn các số nguyên trong đoạn [-7,8].

Dưới đây là hai cách biểu diễn số âm, đó là bù 1 và bù 2.

1. Biểu diễn (bù 1, bù 2)

Một điều quan trọng khi làm việc với các số âm là phải xác định được số bit cần thiết (có thể thừa nhưng không được thiếu). Ví dụ, không thể chỉ sử dụng 4 bit để biểu diễn số 30, vì 4 bit thì chỉ biểu diễn số nguyên trong đoạn [-7,8]. Nhưng, có thể sử dụng 8 bit để biểu diễn số 30 (thậm chí 120), vì 8 bit thì chỉ biểu diễn số nguyên trong đoạn [-127,128].

Số bit này rất quan trọng và phải được xác định trước, tạm gọi là mẫu. Nếu một sử dụng mẫu n-bit thì một số nguyên tham gia tính toán khi biểu diễn ở dạng nhị phân thì phải đủ n-bit, trường hợp thiếu thì phải bổ sung thêm các bit 0 vào phía bên trái cho đủ.

Ở dạng bù 1, để biểu diễn một số âm chỉ đơn giản đảo các bit của số dương tương ứng. Ví dụ, để biểu diễn số -11(10) chỉ đơn giản đảo các bit của số 11 (chú ý: 11(10)=1011(2)). Nghĩa là ở dạng bù 1, mẫu 8-bit, -11(10) = 11110100(2).

Ở dạng bù 2, để biểu diễn một số âm trước hết ta đảo các bit của số dương tương ứng sau đó cộng thêm 1. Ví dụ, để biểu diễn số -11(10) trước hết đảo các bit của số 11 (00001011 → 11110100) sau đó cộng thêm 1 (11110100 + 1 = 11110101). Nghĩa là ở dạng bù 2, mẫu 8-bit, -11(10) = 11110101(2).

Một chú ý là khi biểu diễn số dương ở dạng bù 1 hay bù 2 thì cứ để yên (không đảo bit, không cộng 1).

2. Cộng, trừ

Thực hiện tương tự như với số nguyên không âm, chỉ có một điểm khác là nếu cộng/trừ ở bù 1 thì trường hợp phép cộng/trừ cuối cùng còn dư/mượn thì phải cộng/trừ tiếp 1 (xem hình). Tuy nhiên, nếu cộng/trừ ở bù 2 thì trường hợp phép cộng/trừ cuối cùng còn dư/mượn thì chỉ đơn giản... bỏ qua. Mặc dù ban đầu trong bù 2 có vẻ phức tạp nhưng đây lại là điểm cực hay của bù 2, nó chỉ mất thời gian ban đầu (khi biểu diễn) nhưng lại tiết kiệm hơn rất nhiều trong quá trình tính toán.

Ví dụ về phép cộng:

Ví dụ về phép trừ:

Bình luận (2)

Viết Bình luận
  • thinh
    ?

    the 145,6(10)=?(2)

  • pekphuong
    good

    ths. 

Viết Bình luận

Họ tên Bắt buộc
Email Bắt buộc
Tiêu đề Bắt buộc
Kiểu bình luận
Nội dung
Nhập mã được hiển thị: