Fortran中是否有等效的MATLAB dec2bin函数?

时间:2016-05-02 15:42:44

标签: matlab binary fortran decimal

我想在MATLAB中找到与dec2bin(d,n)类似的函数,它为Fortran生成至少n位的二进制表示。在线我发现this code,它将十进制转换为二进制,但没有一种机制来决定位数,它要求用户决定它是正整数还是正实数...

1 个答案:

答案 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为零。 [...]