Chuyển đổi cơ sở 2 thành cơ sở 10 python

Justin Fletcher tham gia chương trình để nói về cách Lực lượng Vũ trụ Hoa Kỳ đang sử dụng phương pháp học sâu với dữ liệu từ kính viễn vọng để theo dõi các vệ tinh, các mảnh vỡ không gian có khả năng gây chết người cũng như xác định và ngăn chặn các vụ va chạm thảm khốc.  

Trong nghiên cứu của bạn về khoa học máy tính, có lẽ bạn đã được tiếp xúc theo cách này hay cách khác với ý tưởng về số nhị phân. Biểu diễn nhị phân rất quan trọng trong khoa học máy tính vì tất cả các giá trị được lưu trữ trong máy tính đều tồn tại dưới dạng chuỗi các chữ số nhị phân, chuỗi 0 và 1. Nếu không có khả năng chuyển đổi qua lại giữa các biểu diễn thông thường và số nhị phân, chúng ta sẽ cần phải tương tác với máy tính theo những cách rất khó xử

Giá trị số nguyên là các mục dữ liệu phổ biến. Chúng được sử dụng trong các chương trình máy tính và tính toán mọi lúc. Chúng ta học về chúng trong lớp toán và tất nhiên biểu diễn chúng bằng hệ thống số thập phân, hoặc cơ số 10. Số thập phân 23310233_{10}233​10​ và số nhị phân tương ứng của nó 11101001211101001_211101001​2​ được hiểu tương ứng là

2×102+3×101+3×1002\times10^{2} + 3\times10^{1} + 3\times10^{0}2×10​2​​+3×10​1​​+3

1×27+1×26+1×25+0×24+1×23+0×22+0×21+1×201\times2^{7} + 1\times2^{6} + 1\times2^

Nhưng làm thế nào chúng ta có thể dễ dàng chuyển đổi các giá trị số nguyên thành số nhị phân?

Thuật toán Chia cho 2 giả định rằng chúng ta bắt đầu bằng một số nguyên lớn hơn 0. Một phép lặp đơn giản sau đó liên tục chia số thập phân cho 2 và theo dõi phần còn lại. Phép chia đầu tiên cho 2 cung cấp thông tin về việc giá trị là chẵn hay lẻ. Một giá trị chẵn sẽ có phần còn lại là 0. Nó sẽ có chữ số 0 ở hàng đơn vị. Một giá trị lẻ sẽ có số dư là 1 và sẽ có chữ số 1 ở vị trí hàng đơn vị. Chúng tôi nghĩ về việc xây dựng số nhị phân của mình dưới dạng một chuỗi các chữ số; . Như được hiển thị bên dưới, chúng ta lại thấy thuộc tính đảo ngược báo hiệu rằng ngăn xếp có khả năng là cấu trúc dữ liệu phù hợp để giải quyết vấn đề

Chuyển đổi cơ sở 2 thành cơ sở 10 python
Chuyển đổi thập phân sang nhị phân

Mã Python bên dưới triển khai thuật toán Chia cho 2. Hàm convert_to_binary lấy một đối số là một số thập phân và liên tục chia nó cho 2. Dòng 7 sử dụng toán tử modulo có sẵn, %, để trích xuất phần còn lại và dòng 8 sau đó đẩy nó vào ngăn xếp. Sau khi quá trình phân chia đạt đến 0, một chuỗi nhị phân được tạo trong các dòng 11-13. Dòng 11 tạo một chuỗi rỗng. Các chữ số nhị phân được bật ra khỏi ngăn xếp một lần và được thêm vào đầu bên phải của chuỗi. Chuỗi nhị phân sau đó được trả về

Thuật toán chuyển đổi nhị phân có thể dễ dàng được mở rộng để thực hiện chuyển đổi cho bất kỳ cơ sở nào. Trong khoa học máy tính, người ta thường sử dụng một số bảng mã khác nhau. Phổ biến nhất trong số này là nhị phân, bát phân (cơ sở 8) và thập lục phân (cơ sở 16)

Số thập phân 233233233 và số bát phân và thập lục phân tương ứng của nó 3518351_{8}351​8​ và E916E9_{16}E9​16​ được hiểu là

3×82+5×81+1×803\times8^{2} + 5\times8^{1} + 1\times8^{0}3×8​2​​+5×8​1​​+1

14×161+9×16014\times16^{1} + 9\times16^{0}14×16​1​+9×16​0​

Hàm convert_to_binary có thể được sửa đổi để chấp nhận không chỉ giá trị thập phân mà còn là cơ sở cho chuyển đổi dự kiến. Ý tưởng “Chia cho 2” đơn giản được thay thế bằng ý tưởng tổng quát hơn “Chia cho cơ số. ” Một hàm mới có tên là convert_to_base, được hiển thị bên dưới, lấy một số thập phân và bất kỳ cơ số nào trong khoảng từ 2 đến 16 làm tham số. Phần còn lại vẫn được đẩy vào ngăn xếp cho đến khi giá trị được chuyển đổi thành 0. Kỹ thuật xây dựng chuỗi từ trái sang phải tương tự có thể được sử dụng với một thay đổi nhỏ. Các số từ cơ sở 2 đến cơ sở 10 cần tối đa 10 chữ số, do đó, các ký tự chữ số thông thường 0, 1, 2, 3, 4, 5, 6, 7, 8 và 9 hoạt động tốt. Vấn đề xảy ra khi chúng ta vượt ra ngoài cơ sở 10. Chúng ta không còn có thể chỉ đơn giản sử dụng phần còn lại, vì bản thân chúng được biểu diễn dưới dạng số thập phân có hai chữ số. Thay vào đó, chúng ta cần tạo một tập hợp các chữ số có thể được sử dụng để biểu thị những phần còn lại ngoài 9

Một giải pháp cho vấn đề này là mở rộng bộ chữ số để bao gồm một số ký tự bảng chữ cái. Ví dụ: hệ thập lục phân sử dụng mười chữ số thập phân cùng với sáu ký tự bảng chữ cái đầu tiên cho 16 chữ số. Để thực hiện điều này, một chuỗi chữ số được tạo để lưu trữ các chữ số ở vị trí tương ứng của chúng. 0 ở vị trí 0, 1 ở vị trí 1, A ở vị trí 10, B ở vị trí 11, v.v. Khi một phần còn lại được loại bỏ khỏi ngăn xếp, nó có thể được sử dụng để lập chỉ mục vào chuỗi chữ số và chữ số kết quả chính xác có thể được thêm vào câu trả lời. Ví dụ: nếu phần còn lại 13 bị xóa khỏi ngăn xếp, chữ số D sẽ được thêm vào chuỗi kết quả