在Fortran上将十进制数转换为二进制数

时间:2017-03-20 23:11:22

标签: loops binary fortran

我想编写一个程序,将十进制数转换为二进制数,并给出该二进制数的大小。我有以下代码:

          program bin
             implicit none
             integer i, count, bin(100), dec
             write(6,*)'Type a number for the conversion'
             read(5,*) dec
             count = 0
                do i = 1,100
                if (mod(dec,2)==0) then
                   bin(i) = 0
                else
                   bin(i) = 1
                end if
                dec = dec/2
                count = count + 1 
                if (dec == 0) then
                   exit  
                end if
                end do
             write(6,*)1,bin(i), i = count
             write(6,*)count
          end program bin

我遇到了写(6,*)(1,bin(i),i = count)的问题,它显示了消息"#34;复数常量中的预期PARAMETER符号,但我不明白如何解决它。

2 个答案:

答案 0 :(得分:3)

我真的不知道你想通过这条线实现什么

write(6,*)1,bin(i), i = count

如果要输出整数的二进制表示,可以始终使用B格式说明符:

write(*, '(B64)') n

对于大多数现代Fortran编译器,您可以通过将其声明为长度' 0':

来告诉它生成所需数量的数字。
write(*, '(B0)') n

所以这是一个读取数字的小程序,然后使用字符串操作打印出它的二进制长度及其二进制表示:

program binary

    use iso_fortran_env
    implicit none
    integer(kind=int64) :: n
    character(len=64) :: bin_representation
    read(*, *) n
    write(bin_representation, fmt='(B0)') n
    write(*, *) len_trim(bin_representation), trim(bin_representation)

end program binary

答案 1 :(得分:3)

隐含的do循环的正确形式是

  (bin(i), i=1, count)

如此完整

  write(*,*) (bin(i), i=1, count)

但你可以使用一个子阵列

  write(*,*) bin(1:count)

显式格式也很方便

  write(*,'(i0)') bin(1:count)

当然,在整数中存储单个位(0或1)效率不高,并且有更多直接方法可以在Fortran中获取二进制表示。有关示例,请参阅ch21§s答案。