Quy tắc chuyển đổi:
- Phần nguyên: Chia liên tiếp cho 2, lấy phần dư theo thứ tự ngược lại.
- Phần thập phân: Nhân liên tiếp với 2, lấy phần nguyên.
Ví dụ 1: Chuyển 25 sang nhị phân
25 / 2 = 12 dư 1 12 / 2 = 6 dư 0 6 / 2 = 3 dư 0 3 / 2 = 1 dư 1 1 / 2 = 0 dư 1 => 11001
Ví dụ 2: Chuyển 0.7 sang nhị phân
0.7 * 2 = 1.4 -> 1 0.4 * 2 = 0.8 -> 0 0.8 * 2 = 1.6 -> 1 0.6 * 2 = 1.2 -> 1 0.2 * 2 = 0.4 -> 0 0.4 * 2 = 0.8 -> 0 => 0.101100
Vậy 25.7 = 11001.101100
Chương trình C
#include <stdio.h>
int main() {
long double fraDecimal, fraBinary, bFractional = 0.0, dFractional, fraFactor = 0.1;
long int dIntegral, bIntegral = 0;
long int intFactor = 1, remainder, temp, i;
printf("Nhập số thập phân: ");
scanf("%Lf", &fraDecimal);
dIntegral = (long int)fraDecimal;
dFractional = fraDecimal - dIntegral;
// Chuyển phần nguyên
while (dIntegral != 0) {
remainder = dIntegral % 2;
bIntegral = bIntegral + remainder * intFactor;
dIntegral = dIntegral / 2;
intFactor = intFactor * 10;
}
// Chuyển phần thập phân (6 chữ số)
for (i = 1; i <= 6; i++) {
dFractional = dFractional * 2;
temp = (long int)dFractional;
bFractional = bFractional + fraFactor * temp;
if (temp == 1)
dFractional = dFractional - temp;
fraFactor = fraFactor / 10;
}
fraBinary = bIntegral + bFractional;
printf("Giá trị nhị phân tương đương: %Lf\n", fraBinary);
return 0;
}
Kết quả
Nhập số thập phân: 5.7 Giá trị nhị phân tương đương: 101.101100