ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP. HỒ CHÍ MINH
NGÀNH CÔNG NGHỆ THÔNG TIN
BÁO CÁO ASSIGNMENT 2.03
Giảng viên
Thái Hùng Văn
Sinh viên thực hiện
Đỗ Quốc Trí
21127556
Nguyễn Khánh Nhân
21127657
Trần Quốc Tuấn
21127199
BÁO CÁO BÀI TẬP
21CLC02
Contents
I. Thuật toán...................................................................................................3
1. Đổi từ binary sang số không dấu................................................................................3
2. Đổi từ binary sang số thực float và double.................................................................3
3. Đổi từ số không dấu sang binary................................................................................4
4. Đổi từ số thực float và double sang binary.................................................................4
5. Đổi từ binary sang sign: (an-1an-2…a1a0)b.....................................................................5
6. Đổi từ Sign to binary..................................................................................................5
7. Đổi từ Hexa to Binary:...............................................................................................6
8. Đổi từ Binary to Hexa................................................................................................6
II. Hướng dẫn sử dụng..................................................................................7
1. Các màn hình nhập liệu..............................................................................................7
2. Hướng dẫn sử dụng..................................................................................................10
III. Phân cơng bài tập..................................................................................13
1. Đỗ Quốc Trí.............................................................................................................13
2. Nguyễn Khánh Nhân................................................................................................13
3. Trần Quốc Tuấn........................................................................................................13
IV. Tài liệu tham khảo.................................................................................14
2|Page
BÁO CÁO BÀI TẬP
21CLC02
I. Thuật toán
1. Đổi từ binary sang số khơng dấu
-
Hàm thực hiện vịng lặp chạy từ kí tự cuối đến của chuỗi binary để tính giá trị của
số không dấu theo công thức:
(b là hệ cơ số)
-
Trong trường hợp này b = 2 vì là chuỗi nhị phân.
2. Đổi từ binary sang số thực float và double
- Số thực kiểu float được lưu ở 4 bytes (8 bytes với kiểu double) với ý nghĩa tóm tắt
như sau:
1 bit đầu chỉ dấu.
8 bits (double: 11 bits) tiếp theo chỉ số mũ E của mantissa đã được chuẩn hóa
(1.f1f2f3…fn*2E) ở dạng quá 127 (double: 1023).
23 bits (double: 52 bits) cuối dùng để chỉ phần thập phân của mantissa (f 1f2f3…
fn).
- Đầu tiên, hàm sẽ kiểm tra xem liệu số âm hay dương bằng xem bit đầu. Nếu 1 thì số
âm, 0 thì số dương.
- Tiếp theo, hàm lấy 8 bits (double: 11 bits) kế chuyển sang dạng số nguyên không
dấu và trừ đi phần quá 127 (double: 1023) để ra được số mũ thực tế.
- Ghép thêm ký tự ‘1’ vào đầu dãy bit để thành mantissa đã chuẩn hóa và chạy vịng
lặp từ đầu dãy với số mũ được tính ở bước trước và số mũ giảm dần 1 đơn vị sau
mỗi lần lặp đến cuối dãy bit để tính giá trị số thực thỏa công thức:
(b = 2)
3|Page
BÁO CÁO BÀI TẬP
21CLC02
3. Đổi từ số không dấu sang binary
- Áp dụng công thức:
(b = 2)
- Hàm thực hiện vòng lặp lấy số nguyên truyền vào chia lấy dư cho 2 và thêm giá trị
này vào đầu dãy bit và lấy số nguyên truyền vào chia lấy phần nguyên cho 2 (làm
tròn xuống giá trị nguyên gần nhất) cho đến khi số ngun ấy bằng 0 thì dừng vịng
lặp.
- Cuối cùng hàm sẽ thêm các bit 0 vào đầu chuỗi cho đến khi đủ số byte của kiểu dữ
liệu.
4. Đổi từ số thực float và double sang binary
- Số thực âm hay dương, khi được lưu trên máy tính chỉ khác nhau ở bit đầu chỉ dấu.
Vì vậy, trong hàm ta ghi bit đầu theo dấu của số thực và chuyển nó thành số dương
nhằm dễ dàng xử lý.
- Trước tiên, ta đổi phần nguyên của số thực sang dãy binary (thuật tốn chuyển từ số
ngun khơng dấu thành dãy bit) và lưu nó vào một chuỗi. Độ dài của chuỗi này
cũng chính là vị trí của dấu chấm động.
- Sau đó, ta lưu phần thập phân của số dưới dạng binary bằng thuật toán dưới đây:
Tách phần thập phân khỏi số (Với 1.754 thì lấy 0.754)
Thực hiện vòng lặp cho đến khi phần thập phân bằng 0 hoặc đạt đủ số bit:
Nhân phần thập phân cho 2
Nếu nó lớn hơn hoặc bằng 1 thì lưu 1 vào sau dãy bit và lấy 1 trừ đi nó.
Ngược lại, nếu nó nhỏ hơn 1 thì lưu 0 vào sau dãy bit.
- Sau khi đã có đầy đủ dãy bit thể hiện số thực cần tìm, ta tìm ký tự ‘1’ đầu tiên và
suy ra số mũ của mantissa chuẩn hóa bằng cơng thức:
Số mũ = vị trí dấu chấm động - vị trí bit ‘1’ đầu tiên – 1.
4|Page
BÁO CÁO BÀI TẬP
21CLC02
- Số mũ nãy sẽ được cộng phần quá 127 ở kiểu float (double: 1023) và chuyển thành
nhị phân để lưu vào dãy bit kết quả đủ 8 bits đổi với float và 11 bits đối với double.
- Cuối cùng, ta lưu dãy bit từ sau bit 1 đầu tiên vào dãy kết quả sao cho đủ 23 bits
(float) hay 52 bits (double) là có kết quả cần tìm.
5. Đổi từ binary sang sign: (an-1an-2…a1a0)b
- Ta xét bit đầu tiên nếu là ‘1’ thì ta xác định chuỗi bits này được biểu diễn dưới dạng
bù 2 và số ở decimal tương ứng là số âm.
- Đầu tiên ta chuyển chuỗi bit dạng bù 2 này về dạng bù 1 bằng cách lấy nó trừ đi 1.
Lấy bit a0 -1 trước, nếu a0 = ‘1’ thì chuỗi bit mới ở dạng bù 1 sẽ là:
(an-1an-2 …a1a0)b
Nếu bit a0 = ‘0’ thì a0 sẽ = ‘1’ và tiếp tục lấy a1 – 1, cứ thế ta xét đến khi nào gặp bit
là ‘1’ thì sẽ biết đổi bit đó thành ‘0’ và dừng lại. Chuỗi bit có được sau quá trình này
là chuỗi được biểu diễn dưới dạng bù 1.
- Sau đó thực hiện đảo chuỗi bù 1. Nếu bit là ‘0’ thì t chuyển đổi thành ‘1’, nếu bit là
‘1’ thì ta đổi thành ‘0’. Cứ thế làm với tồn bộ bit trong chuỗi bit đó.
- Cuối cùng đổi chuỗi bit này sang dạng decimal theo công thức:
- Vì là số âm nên kết quả cuối cùng sẽ lấy số decimal ta vừa có được nhân thêm -1.
- Nếu là ‘0’ thì số ở dạng decimal cần tìm là số dương nên đơn giản ta chỉ cần chuyển
chuỗi bit này về decimal theo cơng thức:
Kết quả chính là số decimal ta vừa có được.
6. Đổi từ Sign to binary
- Nếu là số dương ta chỉ cần chuyển về dạng binary thì sẽ có được kết quả.
5|Page
BÁO CÁO BÀI TẬP
21CLC02
- Nếu là số âm thì ta phải thực hiện vài bước:
- Đầu tiên ta lấy số đối của nó, tức là số dương dạng decimal, chuyển về dạng binary
ta sẽ được 1 chuỗi bit.
- Thực hiện đảo bit trên chuỗi này ( như cách đã nêu ở trên) ta sẽ được một chuỗi bit
ở dạng bù 1.
- Lấy chuỗi bit dạng bù 1 này cộng thêm 1. Ta lấy bit a0 cộng 1 trước. Nếu a0 là ‘0’ thì
chuỗi bit mới sẽ là (an-1an-2…a11)b. Nếu a0 là ‘1’ thì t sẽ có a 0 mới là ‘0’, tiếp tục lấy
a1 cộng 1, cứ thế cho đến khi lấy được bit là ‘0’ thì sẽ chuyển bit đó thành ‘1’ và
dừng lại. Chuỗi bit cuối cùng này biểu diễn dưới bù 2 và cũng chính là kết quả.
7. Đổi từ Hexa to Binary:
- Ta lấy từng kí tự trong chuỗi hexa chuyển về Decimal:
Nếu kí tự xét là 0->9 thì số Decimal tương ứng cũng là 1->9.
Nếu kí tự xét là A->F thì số Decimal tương ứng là 10->15.
- Sau đó chuyển các số Decimal này về dạng Binary là 1 chuỗi bit gồm 4 bit, nếu có ít
hơn 4 bit thì ta sẽ thêm bit 0 vào đầu chuỗi sao cho đủ 4 bit.
- Ghép từng nhóm chuỗi 4 bit lại theo đúng thứ tự tương ứng ở chuỗi hexa thì ta sẽ có
được chuỗi Binary cần tìm.
8. Đổi từ Binary to Hexa
- Đầu tiên ta chia chuỗi bit thành từng nhóm 4 bit.
- Tiếp theo, chuyển nhóm 4 bit này về Decimal tương ứng, sau đó chuyển số Decimal
thành Hexa tương ứng.
Nếu số Decimal là 0->9 thì Hexa tương ứng cũng là 0->9.
Nếu Decimal là 10->15 thì Hexa tương ứng là A->F.
- Ghép các kí tự Hexa lại theo đúng thứ tự tương ứng với chuỗi Binary thì ta được
chuỗi Hexa cần tìm.
6|Page
BÁO CÁO BÀI TẬP
21CLC02
II. Hướng dẫn sử dụng
1. Các màn hình nhập liệu
- Màn hình hiển thị các kiểu dữ liệu chuyển đổi để người dùng lựa chọn:
- Màn hình hiển thị lựa chọn về các hệ cơ số của dữ liệu đầu vào (số cần chuyển đổi):
7|Page
BÁO CÁO BÀI TẬP
21CLC02
- Màn hình nhập dữ liệu đầu vào (số cần chuyển đổi):
- Màn hình hiển thị kết quả, tùy thuộc vào hệ cơ số của người dùng chọn mà kết quả
hiển thị sẽ khác nhau. Ví dụ như:
Nếu người dùng chọn hệ Decimal (hệ 10) kết quả xuất ra sẽ là số ở hệ
Hexedecimal (hệ 16) và hệ Binary (hệ nhị phân):
Nếu người dùng chọn hệ Binary kết quả xuất ra sẽ là số ở hệ Hexedecimal và hệ
Decimal:
8|Page
BÁO CÁO BÀI TẬP
21CLC02
Nếu người dùng chọn hệ Hexedecimal kết quả xuất ra sẽ là số ở hệ Hexedecimal
và hệ Binary:
9|Page
BÁO CÁO BÀI TẬP
21CLC02
2. Hướng dẫn sử dụng
- Đầu tiên, chương trình sẽ cho người dùng lựa chọn các kiểu dữ liệu:
- Sau khi chọn xong kiểu dữ liệu, người dùng sẽ tiếp tục chọn hệ cơ số của dữ liệu
đầu vào (số cần chuyển đổi):
10 | P a g e
BÁO CÁO BÀI TẬP
21CLC02
Kế đến, người dùng nhập dữ liệu đầu vào (số cần chuyển đổi):
Sau khi nhập hết yêu cầu của chương trình, kết quả sẽ được xuất ra màn hình:
Ở cuối chương trình, người dùng có thể lựa chọn quay lại MENU để chuyển đổi tiếp
bằng cách nhấn phím 1, nếu người dùng muốn kết thúc chương trình nhấn phím bất
kì.
11 | P a g e
BÁO CÁO BÀI TẬP
21CLC02
Lưu ý: khi nhập quá giới hạn của kiểu dữ liệu, chương trình sẽ đưa ra thơng báo.
Ví dụ dưới đây là khi người dùng chọn kiểu dữ liệu Unsigned char và hệ cơ số Decimal,
sau đó nhập Input = 300, Input này quá giới han của kiểu dữ liệu Unsigned char (0 đến
255).
Dưới đây là video hướng dẫn cách sử dụng chương trình:
12 | P a g e
BÁO CÁO BÀI TẬP
21CLC02
III. Phân công bài tập
1. Đỗ Quốc Trí
- Viết hàm chuyển đổi:
Binary to Unsigned (char, short, int).
Binary to Double.
Unsigned to Binary.
Float to Binary.
Double to Binary.
Print bits in 1byte, float, double, format.
Input validation (kiểm tra dữ liệu đầu vào).
2. Nguyễn Khánh Nhân
- Viết hàm chuyển đổi:
Binary to Signed (char, short, int).
Signed to Binary.
Hexa to Binary.
Binary to Hexadecimal.
- Viết MENU.
3. Trần Quốc Tuấn
- Viết hàm chuyển đổi Binary to Float.
- Viết báo cáo.
13 | P a g e
BÁO CÁO BÀI TẬP
21CLC02
IV. Tài liệu tham khảo
- Slide bài giảng Hệ thống Máy tính của giảng viên Thái Hùng Văn.
- />
14 | P a g e