我想编写一个程序,将十进制数转换为二进制数,并给出该二进制数的大小。我有以下代码:
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符号,但我不明白如何解决它。
答案 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答案。