這應該是有效的:
program test
implicit none
integer :: filter(0:31)
data filter/&
b'00000000000000000000000000000001', &
b'00000000000000000000000000000010', &
b'00000000000000000000000000000100', &
b'00000000000000000000000000001000', &
b'00000000000000000000000000010000', &
b'00000000000000000000000000100000', &
b'00000000000000000000000001000000', &
b'00000000000000000000000010000000', &
b'00000000000000000000000100000000', &
b'00000000000000000000001000000000', &
b'00000000000000000000010000000000', &
b'00000000000000000000100000000000', &
b'00000000000000000001000000000000', &
b'00000000000000000010000000000000', &
b'00000000000000000100000000000000', &
b'00000000000000001000000000000000', &
b'00000000000000010000000000000000', &
b'00000000000000100000000000000000', &
b'00000000000001000000000000000000', &
b'00000000000010000000000000000000', &
b'00000000000100000000000000000000', &
b'00000000001000000000000000000000', &
b'00000000010000000000000000000000', &
b'00000000100000000000000000000000', &
b'00000001000000000000000000000000', &
b'00000010000000000000000000000000', &
b'00000100000000000000000000000000', &
b'00001000000000000000000000000000', &
b'00010000000000000000000000000000', &
b'00100000000000000000000000000000', &
b'01000000000000000000000000000000', &
b'10000000000000000000000000000000'/
integer :: a
integer :: k
! Number whose single-bit negations should be found
a = b'1101'
do k=0,31
print *, ieor(a,filter(k))
enddo
end
好,CPU總是反正訪問整個字節。你可以使用IBSET(),但我不認爲這會特別有效。你也可以用一些特定的常量使用IEOR()。 –
IBSET和IBCLR的問題是,我首先需要一個BTEST if語句來檢查該位是否爲0和1,以便我可以選擇相反的結果,我期望在一個巨大的循環中運行相當緩慢。我不知道如何使用IEOR()。翻轉一個位似乎是這樣一個基本的操作,這些方法似乎是矯枉過正。這僅僅是Fortran作爲一種語言的限制,它沒有這種內在性? – user2520385
如果您想將其稱爲限制...您認爲在Fortran中缺少的C或x86彙編中的等效內容是什麼? –