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

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:
- Chia số thập phân cho 2.
- Ghi lại phần dư.
- Tiếp tục chia phần nguyên cho 2 cho đến khi kết quả bằng 0.
- Đọ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 chia | Phần nguyên | Phần dư |
---|---|---|
10 / 2 | 5 | 0 |
5 / 2 | 2 | 1 |
2 / 2 | 1 | 0 |
1 / 2 | 0 | 1 |
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"
.
Integer.toBinaryString()
Cách 2: Dùng phương thức có sẵn 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ạp | Dễ hiểu | Hiệu suất |
---|---|---|---|
Chia liên tiếp (vòng lặp) | O(log N) | Dễ | Nhanh |
Sử dụng | O(1) | Dễ nhất | Nhanh nhất |
Dùng đệ quy | O(log N) | Khó hơn | Chậ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 26. Cách Sử Dụng break, continue và return Trong Java | Tự Học Java Căn Bản
Hướng dẫn cách sử dụng câu lệnh break, continue và return trong Java để kiểm soát vòng lặp và luồng thực thi chương trình hiệu quả.
Bài 25. Vòng Lặp do-while Trong Java | Tự Học Java Căn Bản
Hướng dẫn chi tiết về vòng lặp do-while trong Java, cách sử dụng, cú pháp, ví dụ minh họa và so sánh với vòng lặp while.
Bài 23. Cách Sử Dụng Vòng Lặp While Trong Java | Tự Học Java Căn Bản
Tìm hiểu cách sử dụng vòng lặp while trong Java với cú pháp, ví dụ thực tế và ứng dụng trong lập trình Java.
Bài 22. Cách Sử Dụng Vòng Lặp For-Each Trong Java | Tự Học Java Căn Bản
Tìm hiểu cách sử dụng vòng lặp for-each trong Java với cú pháp, ví dụ thực tế và ứng dụng trong lập trình Java.
Bài viết liên quan
Bài 26. Cách Sử Dụng break, continue và return Trong Java | Tự Học Java Căn Bản
Hướng dẫn cách sử dụng câu lệnh break, continue và return trong Java để kiểm soát vòng lặp và luồng thực thi chương trình hiệu quả.
Bài 25. Vòng Lặp do-while Trong Java | Tự Học Java Căn Bản
Hướng dẫn chi tiết về vòng lặp do-while trong Java, cách sử dụng, cú pháp, ví dụ minh họa và so sánh với vòng lặp while.
Bài 23. Cách Sử Dụng Vòng Lặp While Trong Java | Tự Học Java Căn Bản
Tìm hiểu cách sử dụng vòng lặp while trong Java với cú pháp, ví dụ thực tế và ứng dụng trong lập trình Java.
Bài 22. Cách Sử Dụng Vòng Lặp For-Each Trong Java | Tự Học Java Căn Bản
Tìm hiểu cách sử dụng vòng lặp for-each trong Java với cú pháp, ví dụ thực tế và ứng dụng trong lập trình Java.
