在Fortran中实现十进制转二进制可以通过以下步骤完成,需分别处理整数部分和小数部分:
一、整数部分转换(除2取余法)
算法步骤 - 将整数部分不断除以2,记录每次的余数;
- 将余数逆序排列,得到二进制表示。
示例代码
```fortran
PROGRAM DecimalToBinaryInteger
IMPLICIT NONE
INTEGER :: number, quotient, remainder, binary(32)
INTEGER :: i
WRITE(*,*) '输入一个整数:'
READ(*,*) number
IF (ABS(number) == 0) THEN
PRINT *, '0'
STOP
END IF
binary(1) = 0
DO i = 1, 32
quotient = ABS(number) / 2
remainder = MOD(ABS(number), 2)
binary(i) = remainder
number = quotient
END DO
PRINT *, '二进制结果:'
WRITE(*, '(I32)') binary
STOP
```
二、小数部分转换(乘2取整法)
算法步骤
- 将小数部分乘以2,取整数部分作为当前二进制位;
- 重复上述操作,直到小数部分为0或达到所需精度。
示例代码
```fortran
PROGRAM DecimalToBinaryFraction
IMPLICIT NONE
REAL :: number, fractionalPart, binary(100)
INTEGER :: i
WRITE(*,*) '输入一个小数:'
READ(*,*) number
IF (MOD(ABS(number), 1.0) == 0.0) THEN
PRINT *, '0.'
STOP
END IF
fractionalPart = ABS(number) - INT(ABS(number))
binary(1) = 0
DO i = 1, 100
fractionalPart = 2.0 * fractionalPart
binary(i) = INT(fractionalPart)
IF (fractionalPart == 0.0) EXIT
fractionalPart = fractionalPart - INT(fractionalPart)
END DO
PRINT *, '二进制结果:.'
WRITE(*, '(F100.100)') binary
STOP
```
三、组合整数与小数部分
若输入为带符号数,需单独处理符号(如用符号位表示);
小数部分需注意精度控制,避免无限循环。
四、注意事项
数据类型选择:
整数部分使用`INTEGER`,小数部分使用`REAL`;
输出格式:
使用`'(I32)'`输出整数部分,`'(F100.100)'`输出小数部分(保留100位小数);
边界条件:
处理0和负数的情况。
通过上述方法,可分别实现十进制整数和小数部分的二进制转换,再根据需要组合结果。