Bài 24. Chuyển Đổi Số Từ Thập Phân Sang Nhị Phân Trong Java | Tự Học Java Căn Bản

Published on
Thuộc danh mục: Học Java Căn Bản|Đăng bởi: Lê Thanh Giang||5 min read
Facebook share iconLinkedIn share iconTwitter share iconPinterest share iconTumblr share icon
Bài 24. Cách Chuyển Đổi Số Từ Thập Phân Sang Nhị Phân Trong Java | Tự Học Java Căn Bản

Trong lập trình, việc chuyển đổi số từ hệ thập phân (decimal) sang hệ nhị phân (binary) là một bài toán thường gặp. Java cung cấp nhiều cách để thực hiện chuyển đổi này, bao gồm:

  • Dùng phương pháp chia liên tiếp (thuật toán thủ công).
  • Sử dụng phương thức có sẵn của Java (Integer.toBinaryString()).
  • Dùng đệ quy.

Bài viết này sẽ hướng dẫn bạn từng cách một cách chi tiết kèm theo ví dụ minh họa.

Hệ thập phân và hệ nhị phân là gì?

  • Hệ thập phân (Decimal - Base 10):

    • Là hệ số đếm phổ biến mà chúng ta sử dụng hàng ngày.
    • Gồm 10 chữ số: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
  • Hệ nhị phân (Binary - Base 2):

    • Chỉ sử dụng 2 chữ số: 0 và 1.
    • Hệ thống máy tính sử dụng hệ nhị phân để lưu trữ và xử lý dữ liệu.

Ví dụ:

  • Số 10 (thập phân)1010 (nhị phân).
  • Số 25 (thập phân)11001 (nhị phân).

Cách 1: Chuyển đổi số thập phân sang nhị phân bằng phương pháp chia liên tiếp

Phương pháp này sử dụng cách chia số thập phân cho 2 liên tiếp và lấy phần dư, sau đó đọc phần dư theo thứ tự ngược lại.

Các bước thực hiện:

  1. Chia số thập phân cho 2.
  2. Ghi lại phần dư.
  3. Tiếp tục chia phần nguyên cho 2 cho đến khi kết quả bằng 0.
  4. Đọc ngược các phần dư để có kết quả nhị phân.

Ví dụ: Chuyển 10 (thập phân) sang nhị phân

Phép chiaPhần nguyênPhần dư
10 / 250
5 / 221
2 / 210
1 / 201

Kết quả đọc ngược: 1010 (nhị phân)

Triển khai code Java

import java.util.Scanner;

public class DecimalToBinary {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Nhập số thập phân: ");
        int decimal = scanner.nextInt();
        scanner.close();

        System.out.println("Số nhị phân: " + convertToBinary(decimal));
    }

    public static String convertToBinary(int decimal) {
        StringBuilder binary = new StringBuilder();

        while (decimal > 0) {
            int remainder = decimal % 2;
            binary.insert(0, remainder); // Thêm phần dư vào đầu chuỗi
            decimal /= 2;
        }

        return binary.length() > 0 ? binary.toString() : "0"; // Nếu input là 0
    }
}

Giải thích:

  • Dùng vòng lặp while để thực hiện chia liên tiếp.
  • Dùng StringBuilder.insert(0, remainder) để ghép chuỗi từ trái sang phải.
  • Nếu số nhập vào là 0, trả về "0".

Cách 2: Dùng phương thức có sẵn Integer.toBinaryString()

Java cung cấp sẵn phương thức Integer.toBinaryString(int number) để chuyển đổi số thập phân sang nhị phân.

Triển khai code Java

import java.util.Scanner;

public class DecimalToBinaryBuiltIn {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Nhập số thập phân: ");
        int decimal = scanner.nextInt();
        scanner.close();

        // Sử dụng phương thức có sẵn của Java
        String binary = Integer.toBinaryString(decimal);
        System.out.println("Số nhị phân: " + binary);
    }
}

Giải thích:

  • Cực kỳ đơn giản và nhanh chóng.
  • Dùng thư viện có sẵn, không cần viết thuật toán thủ công.

Cách 3: Dùng đệ quy để chuyển đổi số

Chúng ta có thể sử dụng đệ quy (recursion) để chuyển đổi số thập phân sang nhị phân.

Triển khai code Java

import java.util.Scanner;

public class DecimalToBinaryRecursive {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Nhập số thập phân: ");
        int decimal = scanner.nextInt();
        scanner.close();

        System.out.println("Số nhị phân: " + convertToBinary(decimal));
    }

    public static String convertToBinary(int decimal) {
        if (decimal == 0) {
            return "0";
        } else if (decimal == 1) {
            return "1";
        }
        return convertToBinary(decimal / 2) + (decimal % 2);
    }
}

Giải thích:

  • Gọi đệ quy đến khi số giảm về 0 hoặc 1.
  • Ghép kết quả bằng cách cộng phần dư vào chuỗi kết quả.

So sánh các phương pháp

Phương phápĐộ phức tạpDễ hiểuHiệu suất
Chia liên tiếp (vòng lặp)O(log N)DễNhanh

Sử dụng Integer.toBinaryString()

O(1)Dễ nhấtNhanh nhất
Dùng đệ quyO(log N)Khó hơnChậm hơn nếu N lớn

Kết luận

  • Dùng vòng lặp while nếu muốn hiểu rõ thuật toán.
  • Dùng Integer.toBinaryString() nếu cần giải pháp nhanh gọn.
  • Dùng đệ quy nếu muốn luyện tập về đệ quy.

Bạn nên sử dụng Integer.toBinaryString() trong thực tế vì nó đơn giản và hiệu suất tốt nhất!

Bài tiếp theo: Bài 25. Vòng lặp do-while trong trong Java

Bài viết mới nhất

Bài viết liên quan

Newsletter border

Đăng ký để nhận tin từ RiverLee