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,只使用*
,这样更安全。