BÁO CÁO ĐỒ ÁN Biểu diễn tính tốn số nguyên lớn NOVEMBER 23, 2015 HOÀNG MINH TÚ 1451066 NGUYỄN TUẤN ANH 1451007 Thành viên nhóm: STT Họ tên MSSV Nhiệm vụ Nguyễn Tuấn Anh 1451007 Lên ý tưởng, toán tử + - * /, chuyển đổi số sang 10, từ hệ 16 sang hệ ngược lại Viết báo cáo Hoàng Minh Tú Lên ý tưởng, chuyển đổi số 10 sang hệ Làm toán tử logic, ror, rol Phụ viết báo cáo 1451066 Môi trường lập trình: Microsoft Visual Studio 2013 C ++ Ý tưởng thiết kế: - Sử dụng biến kiểu long long left right để biểu diễn số Qint, biến left chứa 64 bit (từ -> 63), biến right 64 bit lại (từ 64 -> 127) - Xây dựng hàm tính toán Qint: chuyển đổi qua lại dạng số, toán tử + - * / =, phép xử lí bit AND OR XOR NOT > ROR ROL Chuyển đổi từ 10 -> 2: chia dần số thập phân cho kết 0, lần chia lấy số dư phép chia gán cho bit theo thứ tự Nếu số âm đảo bit kết nhận +1 Chuyển đổi từ -> 10: kiểm tra số hệ có âm hay khơng, âm chuyển qua 2's complement Sau chuyển sang hệ 10 nhờ cơng thức kết += ^ i; tính trước base_dec[i] = ^ i (kiểu string); thêm dấu - số âm Chuyển đổi từ 16 -> 2: với kí tự số hệ 16, chuyển thành bit tương ứng hệ nhị phân gán vào giá trị số Lặp lại hết Chuyển đổi từ ->16: xét bit số hệ chuyển thành mã hexa tương ứng Lặp lại hết Phép gán =: chuyển hết nhị phân, sau set lại bit theo chuỗi nhị phân Phép cộng: sử dụng hàm Sum(int base, string, string) ta cộng string có hệ số BASE Sử dụng biến nhớ tính số (của tổng) lấy mod tổng giá trị phần tử tương ứng Chuyển giá trị dạng thập phân để dễ dàng xử lý Sau chuyển dạng BASE để ghép vào xâu kết Phép trừ: Ta coi a - b a + (-b) Chuyển hết dạng số kể (-b), sau thực trừ số Chuyển ngược dạng tương ứng Phép nhân: tương tự hàm cộng Sử dụng hàm nhân Mul(int base, string, string) để nhân string số BASE Nhân chữ số số cho tồn số sau cộng lại ta làm tay Ta chuyển giá trị char phần tử giá trị số 10 ngược lại để dễ dàng tính tốn Xâu kết thuộc dạng số BASE Phép chia: Sử dụng hàm chia Div(int BASE, string, string) để chia string số BASE (không âm) Cách làm đơn giản ta chia tay Ta lấy chữ số đầu tiên, không chia ta lấy tiếp chữ số thứ v.v sau tìm số x lớn cho số chia >= x * số bị chia Thêm x vào kết (sau chuyển sang dạng BASE) Sau ta tính kết có dấu ‘-‘ hay không (với trường hợp BASE = 10 - số 10) Tất operator + - * / có hàm xóa số ‘0’ dư bên trái ngồi (ở đầu) số nhằm có kết đề yêu cầu Toán tử AND &: thực nhị phân, AND bit số với Toán tử OR |: thực nhị phân, OR bit số với Toán tử XOR ^: thực nhị phân, XOR bit số với Toán tử NOT~: thực nhị phân, NOT bit số gán vào kết Phép toán dịch trái : dịch bit sang bên phải bit, lặp lại n lần Phép toán ROL: lưu lại giá trị bit thứ 127, thực tương tự phép dịch trái bit sau gán giá trị bit thứ 127 lưu cho bit thứ Phép toán ROR: lưu lại giá trị bit thứ 0, thực tương tự phép dịch phải bit sau gán giá trị bit thứ lưu cho bit thứ 127 - Phạm vi biểu diễn: -2127 -> 2127-1 Chạy kiểm tra: Chuyển đổi số Các tốn tử tính tốn + - * / Các toán tử logic rol, ror - Đánh giá mức độ hoàn thành: Hoàn thành đầy đủ chức u cầu Khơng có chức khơng làm làm sai Hồn thành 100% đồ án Các nguồn tài liệu tham khảo - Bài giảng thầy TA lớp ECE341 lớp 14CTT .. .1 Thành viên nhóm: STT Họ tên MSSV Nhiệm vụ Nguyễn Tuấn Anh 14 510 07 Lên ý tưởng, toán tử + - * /, chuyển đổi số sang 10 , từ hệ 16 sang hệ ngược lại Viết báo cáo... số 10 sang hệ Làm toán tử logic, ror, rol Phụ viết báo cáo 14 510 66 Mơi trường lập trình: Microsoft Visual Studio 2 013 C ++ Ý tưởng thiết kế: - Sử d ng biến kiểu long long left right để biểu diễn... bit lại (từ 64 -> 12 7) - Xây d ng hàm tính tốn Qint: chuyển đổi qua lại d ng số, toán tử + - * / =, phép xử lí bit AND OR XOR NOT > ROR ROL Chuyển đổi từ 10 -> 2: chia d n số thập phân cho