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

Loops 在Fortran上将十进制数转换为二进制数,loops,binary,fortran,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

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

          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)时遇到问题,它显示消息“复杂常量at中的预期参数符号”,但我不知道如何修复它

我真的不知道你想用这条线做什么

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

我真的不知道你想用这条线做什么

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

隐含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答案。

隐含do循环的正确形式为

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

  write(*,*) (bin(i), i=1, count)
但是你可以只使用一个子阵列

  write(*,*) bin(1:count)
显式格式也很方便

  write(*,'(i0)') bin(1:count)
当然,在整数中存储单个位(0或1)并不太有效,而且在Fortran中有更直接的方法来获取二进制表示。请参见第21章的答案以获取示例。

您说
write(6,*)(1,bin(i),i=count)
但在您的代码中您有
write(6,*)1,bin(i),i=count
。避免从5读到6,只使用
*
,这样更安全。你说
write(6,*)(1,bin(i),i=count)
但在你的代码中你有
write(6,*)1,bin(i),i=count
。避免从5读到6,只使用
*
,这样更安全。