【问题标题】:exchange bits of an integer number in fortran在fortran中交换整数的位
【发布时间】:2022-07-06 23:14:10
【问题描述】:

假设您有数字 2,其二进制表示为 0010 如何交换位于位置 0 和 2 的位以及位于 1 和 3 的位? 所以结果是 1000,即数字 8?

如果我尝试使用 mvbits 交换位 0 和 2:

integer :: s1
s1= 2
call mvbits(s1,1,1,s1,3)

结果是数字10

这样的操作有内在函数吗?

【问题讨论】:

    标签: binary fortran


    【解决方案1】:

    mvbit 复制这些位。它不会移动位,您似乎希望将移动的位重置为零。您所发现的本质上是一个允许的混叠问题。您将 1 从 0010 复制到第三个位置以获得 1010。请考虑以下几点:

    program foo
       implicit none
       integer(1) i, j
       j = 0
       i = 2
       call mvbits(i, 1, 1, j, 3) 
       write(*,'(B8.8,1X,B8.8,1X,2I3)') i, j, i, j
       call mvbits(i, 1, 1, j, 3) 
       write(*,'(B8.8,1X,B8.8,1X,2I3)') i, j, i, j
    end program foo
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 2014-07-27
      • 2022-07-14
      相关资源
      最近更新 更多