【问题标题】:Is there an equivalent MATLAB dec2bin function in Fortran?Fortran 中是否有等效的 MATLAB dec2bin 函数?
【发布时间】:2016-08-27 10:50:02
【问题描述】:

我想在 MATLAB 中找到与 dec2bin(d,n) 类似的函数,它为 Fortran 生成至少具有 n 位的二进制表示。网上找了this code,它把十进制转二进制,但没有决定位数的机制,它要求用户判断是正整数还是正实数...

【问题讨论】:

    标签: matlab binary fortran decimal


    【解决方案1】:

    这是一个基于 B 编辑运算符的解决方案(根据高性能标记的评论),它需要一个相当新的编译器。

    !> 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“B、O、Z编辑”:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多