Bước tới nội dung

Hệ số đếm

Tủ sách mở Wikibooks


Hệ số đếm là tập hợp của các số tự nhiên được biểu diễn qua các hệ con số thí dụ như hệ số 2 , hệ số 8 và hệ số 16. dùng trong ngôn ngữ máy tính, hệ số 10 dùng trong ngôn ngữ con người,


Con số hệ nhị phân

[sửa]

Hệ số nhị phân (hệ số 2) dùng các con số từ 0 đến 2 để biểu thi các số nhỏ hơn 2

Các số lớn hơn 2 được biểu thị như sau

Thí dụ

[sửa]

Các phép tính dùng hệ nhị phân

[sửa]

Phép tính dùng trong hệ nhị phân cũng tương tự như các phép tính được áp dụng trong các hệ khác. Tính cộng, tính trừ, tính nhân và tính chia cũng có thể được áp dụng với các giá trị số nhị phân.

Tính cộng

[sửa]
Một sơ đồ mạch điện (circuit diagram) mạch bán cộng nhị phân, dùng để cộng hai bit với nhau, tạo nên một tổng và số nhớ mang sang hàng bên cạnh

Phép tính đơn giản nhất trong hệ nhị phân là tính cộng. Cộng hai đơn vị trong hệ nhị phân được làm như sau:

0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0 (nhớ 1 lên hàng thứ 2)

Cộng hai số "1" với nhau tạo nên giá trị "10", tương đương với giá trị 2 trong hệ thập phân. Điều này xảy ra tương tự trong hệ thập phân khi hai số đơn vị được cộng vào với nhau. Nếu kết quả bằng hoặc cao hơn giá trị gốc (10), giá trị của con số ở hàng tiếp theo được nâng lên:

5 + 5 = 10
7 + 9 = 16

Hiện tượng này được gọi là "nhớ" hoặc "mang sang", trong hầu hết các hệ thống số dùng để tính, đếm. Khi tổng số vượt lên trên gốc của hệ số, phương thức làm là "nhớ" một sang vị trí bên trái, thêm một hàng. Phương thức "nhớ" cũng hoạt động tương tự trong hệ nhị phân:

     1 1 1 1 1  (nhớ)
     0 1 1 0 1
 +   1 0 1 1 1
 -------------
 = 1 0 0 1 0 1 

Bản sửa đổi     
   a b c d e f
   1 1 1 1 1 0  (nhớ)
     0 1 1 0 1
 +   1 0 1 1 1
Hoặc ta có thể ghi thành
   1 1 1 1 1 0  (nhớ)
   0 0 1 1 0 1
 + 0 1 0 1 1 1
 -------------
 = 1 0 0 1 0 0
(tính chất số 0 đứng ở đầu tiên không có giá trị)
Ở cột f hàng nhớ là bằng 0 (khởi tạo giá trị bộ nhớ ban đầu không có gì nên bằng 0)
Chính xác thì phép tính được thực hiện theo dạng (nhớ) + số đầu tiên + số thứ 2
f. 0 + 1 + 1 = 1 0 => 0 vào kết quả (1 vào nhớ)
e. 1 + 0 + 1 = 1 0 => 0 vào kết quả (1 vào nhớ)
d. 1 + 1 + 1 = 1 1 => 1 vào kết quả (1 vào nhớ)
                        " Chú thích cho phép tính c:
                               g h
                               0 0 (nhớ) 
                               1 0
                            +  0 1
                            =  1 1
                          h. 0 + 0 + 1 = 1 => 1 vào kết quả (0 vào nhớ)
                          g. 0 + 1 + 0 = 1 => 1
                          => KQ = 1 1 "
c. 1 + 1 + 0 = 1 0 => 0 vào kết quả (1 vào nhớ)
b. 1 + 0 + 1 = 1 0 => 0 vào kết quả (1 vào nhớ)
a. 1 + 0 + 0 = 1 => 1 vào kết quả 
=> 100100 
P/s: Phép tính trên do tự tính có gì sai xin chỉ giáo

Trong ví dụ trên, hai số được cộng với nhau: 011012 (13 thập phân) và 101112 (23 thập phân). Hàng trên cùng biểu đạt những số nhớ, hoặc mang sang. Bắt đầu bằng cột cuối cùng bên phải, 1 + 1 = 102. 1 được mang sang bên trái, và 0 được viết vào hàng tổng phía dưới, cột cuối cùng bên phải. Hàng thứ hai từ cột cuối cùng bên phải được cộng tiếp theo: 1 + 0 + 1 = 102; Số 1 lại được nhớ lại và mang sang, và số 0 được viết xuống dưới cùng. Cột thứ ba: 1 + 1 + 1 = 112. Lần này 1 được nhớ và mang sang hàng bên cạnh, và 1 được viết xuống hàng dưới cùng. Tiếp tục khai triển theo quy luật trên cho chúng ta đáp án cuối cùng là 1001002.

Trong Đánh thức tài năng quyển 5, tập 22 đã ghi các kiến thức này.

Tính trừ

[sửa]

Phép tính trừ theo quy chế tương tự:

0 − 0 = 0
0 − 1 = 1 (mượn 1 ở bit tiếp theo)
1 − 0 = 1
1 − 1 = 0

Một đơn vị nhị phân được trừ với một đơn vị nhị phân khác như sau:

     * * * *  (hình sao đánh dấu các cột phải mượn)
 1 1 0 1 1 1 0
−    1 0 1 1 1
---------------
=1 0 1 0 1 1 1

     1 1 1 1   (bit mượn)
 1 1 0 1 1 1 0
-    1 0 1 1 1
-----------------
=1 0 1 0 1 1 1

Trừ hai số dương cũng tương tự như "cộng" một số âm với giá trị tương đồng của một số tuyệt đối; máy tính thường dùng ký hiệu Bù 2 để diễn đạt số có giá trị âm. Ký hiệu này loại trừ được nhu cầu bức thiết phải có một phương pháp làm phép trừ biệt lập. Xin xem thêm chi tiết trong chương mục Bù 2.

Tính nhân

[sửa]

Phép tính nhân trong hệ nhị phân cũng tương tự như phương pháp làm trong hệ thập phân. Hai số A và B được nhân với nhau bởi những tích số cục bộ: với mỗi con số ở B, tích của nó với số một con số trong A được tính và viết xuống một hàng mới, mỗi hàng mới phải chuyển dịch vị trí sang bên trái, hầu cho con số cuối cùng ở bên phải đứng cùng cột với vị trí của con số ở trong B đang dùng. Tổng của các tích cục bộ này cho ta kết quả tích số cuối cùng.

Vì chỉ có hai con số trong hệ nhị phân, nên chỉ có 2 kết quả khả quan trong tích cục bộ:

  • Nếu con số trong B là 0, tích cục bộ sẽ là 0
  • Nếu con số trong B là 1, tích cục bộ sẽ là số ở trong A

Ví dụ, hai số nhị phân 1011 và 1010 được nhân với nhau như sau:

    1 0 1 1 (A)
×    1 0 1 0 (B)
--------------
        0 0 0 0 ← tương đương với 0 trong B
+     1 0 1 1   ← tương đương với một trong A
+   0 0 0 0 
+ 1 0 1 1 
---------------
= 1 1 0 1 1 1 0

Xem thêm Phương pháp làm tính nhân của Booth.

Tính chia

[sửa]

Tính chia nhị phân cũng tương tự như phép chia trong hệ thập phân.

__________
1 1 0 1 1 |1 0 1

Ở đây ta có số bị chia là 110112, hoặc 27 trong số thập phân, số chia là 1012, hoặc 5 trong số thập phân. Cách làm tương tự với cách làm trong số thập phân. Ở đây ta lấy 3 số đầu của số bị chia 1102 để chia với số chia, tức là 1012, được 1, viết lên trên hàng kẻ. Kết quả này được nhân với số chia, và tích số được trừ với 3 số đầu của số bị chia. Số tiếp theo là một con số 1 được hạ xuống để tạo nên một dãy số có ba con số, tương tự với số lượng các con số của số chia:

  1
  __________
  1 1 0 1 1 | 1 0 1
 −1 0 1
  -----
  0 0 1

Quy luật trên được lặp lại với những hàng số mới, tiếp tục cho đến khi tất cả các con số trong số bị chia đã được dùng hết:

  1 0 1
  __________
  1 1 0 1 1 | 1 0 1
 −1 0 1
  -----
  0 0 1 1
  − 0 0 0
    -----
     1 1 1
    − 1 0 1
       -----
       1 0

Phân số của 110112 chia cho 1012 là 1012, như liệt kê phía trên đường kẻ, trong khi số dư còn lại được viết ở hàng cuối là 102. Trong hệ thập phân, 27 chia cho 5 được 5, dư 2.

Con số hệ thập phân

[sửa]

Hệ số thập phân (hệ số 10) dùng các con số từ 0 đến 9 để biểu thị các số

0 , 1 , 2 ... 9

Các số lớn hơn 9 được biểu thị như sau

Thí dụ

[sửa]

Do vậy phương pháp biến đổi một số nguyên, ở hệ thập phân sang hệ nhị phân tương đương, có thể được tiến hành bằng cách chia số này cho 2, và những số dư được viết xuống vào hàng (đơn vị) của nó. Kết quả lại tiếp tục được chia 2, và số dư lại được viết xuống vào hàng (chục) của nó. Phương thức này được tiếp tục nhắc lại cho đến khi thương số của phép chia là 0.

Ví dụ, 118, trong hệ thập phân là:

Phép tính Số dư
118 ÷ 2 = 59 0
59 ÷ 2 = 29 1
29 ÷ 2 = 14 1
14 ÷ 2 = 7 0
7 ÷ 2 = 3 1
3 ÷ 2 = 1 1
1 ÷ 2 = 0 1

Lược trình các con số dư theo thứ tự từ dưới lên trên, cho chúng ta một số nhị phân 11101102.

Để biến đổi một số nhị phân sang hệ thập phân, chúng làm ngược lại. Bắt đầu từ bên trái, nhân đôi kết quả, rồi cộng con số bên cạnh cho đến khi không còn con số nào nữa. Lấy ví dụ để đổi 1100101011012 sang hệ thập phân:

Kết quả Số còn lại
0 110010101101
0 × 2 + 1 = 1 10010101101
1 × 2 + 1 = 3 0010101101
3 × 2 + 0 = 6 010101101
6 × 2 + 0 = 12 10101101
12 × 2 + 1 = 25 0101101
25 × 2 + 0 = 50 101101
50 × 2 + 1 = 101 01101
101 × 2 + 0 = 202 1101
202 × 2 + 1 = 405 101
405 × 2 + 1 = 811 01
811 × 2 + 0 = 1622 1
1622 × 2 + 1 = 3245

Kết quả là 3245.

Phần phân số trong một số tự nhiên được biến đổi với cùng một phương pháp, dựa vào phép toán chuyển vị nhị phân để tăng gấp đôi hoặc giảm xuống một nửa giá trị của con số.

Với phân số nhị phân có giá trị "0,110101101012", giá trị của con số đầu tiên của phần thập phân là , của con số thứ hai là , vân vân. Vậy nếu chúng ta có giá trị 1 ngay sau dấu phẩy thì giá trị của số thập phân ít nhất phải là , và tương tự ngược lại. Nếu chúng ta gấp đôi giá trị của con số đó lên thì giá trị của số phải ít nhất là 1. Điều này khiến chúng ta liên tưởng đến một thuật toán: liên tục nhân đôi con số chúng ta cần biến đổi, ghi lại kết quả nếu kết quả ít nhất là 1, nhưng vứt đi phần số nguyên.

Ví dụ: , trong nhị phân là:

Biến đổi Kết quả
0,
0,0
0,01
0,010
0,0101

Vì vậy phần phân số nhắc đi nhắc lại 0,333... tương đương với phần phân số nhắc đi nhắc lại trong hệ nhị phân 0,0101....

hoặc lấy ví dụ số 0,110, trong hệ nhị phân là:

Biến đổi Kết quả
0,1 0,
0.1 × 2 = 0,2 < 1 0,0
0.2 × 2 = 0,4 < 1 0,00
0.4 × 2 = 0,8 < 1 0,000
0.8 × 2 = 1,6 ≥ 1 0,0001
0.6 × 2 = 1,2 ≥ 1 0,00011
0.2 × 2 = 0,4 < 1 0,000110
0.4 × 2 = 0,8 < 1 0,0001100
0.8 × 2 = 1,6 ≥ 1 0,00011001
0.6 × 2 = 1,2 ≥ 1 0,000110011
0.2 × 2 = 0,4 < 1 0,0001100110

Đây cũng là một phân số vô hạn tuần hoàn 0,000110011.... Có một điều đáng ngạc nhiên là có những phân số thập phân không tuần hoàn nhưng khi chuyển sang nhị phân, nó lại trở thành một phân số tuần hoàn. Chính vì lý do này mà nhiều người thấy ngạc nhiên khi họ kiểm nghiệm thấy phép cộng 0,1 +... + 0,1 (gồm 10 số hạng) khác với giá trị một trong khi giải toán dùng phép toán phân số (floating point arithmetic). Thực tế cho thấy, phân số nhị phân chỉ không tuần hoàn khi dạng thập phân của nó là thương của phép chia giữa một số nguyên và lũy thừa cơ số chứ không phải giữa một số nguyên và bội của

Phương pháp biến đổi sau cùng là cách đổi phân số nhị phân sang thập phân. Khó khăn duy nhất là trường hợp của những phân số tuần hoàn, ngoài ra, phương pháp này có thể được thực hiện bằng cách dịch vị trí của dấu thập phân, làm tròn thành số nguyên, biến đổi như cách ở trên, sau đó chia với số mũ của 2 tương ứng trong hệ thập phân. Lấy ví dụ:

= 1100 ,101110011100...
= 1100101110 ,0111001110...
= 11001 ,0111001110...
= 1100010101
= (789/62)10

Một cách khác để biến đổi hệ nhị phân sang thập phân nhanh hơn, đối với những người đã quen thuộc với hệ thập lục phân, là làm bằng cách gián tiếp, đầu tiên đổi ( trong hệ nhị phân) sang ( trong hệ thập lục phân), rồi đổi ( trong hệ thập lục phân) sang ( hệ thập phân).