我想在MATLAB中找到与dec2bin(d,n)
类似的函数,它为Fortran生成至少n
位的二进制表示。在线我发现this code,它将十进制转换为二进制,但没有一种机制来决定位数,它要求用户决定它是正整数还是正实数...
答案 0 :(得分:4)
这是一个基于B
编辑运算符的解决方案(根据High Performance Mark的评论),需要一个相当新的编译器。
!> Returns a binary representation of d as a string with at least n bits.
!> abs(d) < 2^52
function dec2bin(d, n)
implicit none
integer,intent(in) :: d
integer,intent(in),optional :: n
character(len=:),allocatable :: dec2bin
character(len=53) :: tmp
integer :: n_
character(len=8) :: f
if (present(n)) then
n_ = min(n, 53)
write(f,'(i2)') n_
f = '(B' // trim(adjustl(f)) // '.' // trim(adjustl(f)) // ')'
else
f = '(B53)'
endif
write(tmp,f) d
dec2bin = trim(adjustl(tmp))
end function
请注意,此功能不会检查符号(因为符号处理正确)。如果要将其限制为正整数,则需要在函数外部执行此操作。
仅仅因为我必须自己查找正确的语法,以下是Fortran 2008 Standard,Cl的相关章节。 10.7.2.4&#34; B,O和Z编辑&#34;:
1 Bw,Bw .m,Ow,Ow .m,Zw和Zw .m编辑描述符表示要编辑的字段占用w 位置,除非w为零。当w为零时,处理器选择字段宽度。在输入时,w不应该 零。相应的输入/输出列表项应为整数,实数或复数类型。
[...]
6 Bw .m,Ow .m和Zw .m编辑描述符的输出字段与Bw,Ow和Zw编辑描述符的输出字段相同,但数字字符串或十六进制数字字符串除外由至少m位数组成。如有必要,足够 包括前导零以实现最小的m位数。 m的值不得超过w的值, 除非w为零。 [...]