Trong hệ thống máy tính, số nhị phân (binary) biểu diễn trong hệ cơ số 2, số thập phân (decimal) trong hệ cơ số 10.
Ví dụ số thập phân và nhị phân tương ứng:
| Số thập phân | Số nhị phân |
|---|---|
| 10 | 01010 |
| 7 | 00111 |
| 25 | 11001 |
| 16 | 10000 |
Chương trình chuyển đổi nhị phân sang thập phân và ngược lại:
Ví dụ
#include <iostream>
using namespace std;
void DecimalToBinary(int n) {
int binaryNumber[100], num = n;
int i = 0;
while (n > 0) {
binaryNumber[i] = n % 2;
n = n / 2;
i++;
}
cout << "Dạng nhị phân của " << num << " là ";
for (int j = i - 1; j >= 0; j--)
cout << binaryNumber[j];
cout << endl;
}
int BinaryToDecimal(int n) {
int decimalNumber = 0;
int base = 1;
int temp = n;
while (temp) {
int lastDigit = temp % 10;
temp = temp / 10;
decimalNumber += lastDigit * base;
base = base * 2;
}
cout << "Dạng thập phân của " << n << " là " << decimalNumber << endl;
}
int main() {
DecimalToBinary(23);
BinaryToDecimal(10101);
return 0;
}
Kết quả đầu ra
Dạng nhị phân của 23 là 10111 Dạng thập phân của 10101 là 21
Trong chương trình, hai hàm DecimalToBinary và BinaryToDecimal chuyển đổi hai chiều.
Trong DecimalToBinary, giá trị nhị phân của n lưu trong mảng binaryNumber[]. Vòng while lấy phần dư n % 2 lưu vào mảng mỗi vòng:
while (n > 0) {
binaryNumber[i] = n % 2;
n = n / 2;
i++;
}
Sau đó in nhị phân bằng vòng for ngược (từ chỉ số cao xuống 0):
cout << "Dạng nhị phân của " << num << " là "; for (int j = i - 1; j >= 0; j--) cout << binaryNumber[j];
Trong BinaryToDecimal, vòng while chuyển nhị phân sang thập phân. lastDigit chứa bit cuối của temp. base chứa cơ số 2, 4, 6, 8... decimalNumber cộng dồn tích lastDigit * base:
while (temp) {
int lastDigit = temp % 10;
temp = temp / 10;
decimalNumber += lastDigit * base;
base = base * 2;
}
Trong main(), gọi hai hàm chuyển đổi:
DecimalToBinary(23); BinaryToDecimal(10101);