Fortranでビット演算をするサンプルスクリプトを作りました。余りソースが無いので、サンプルを動かしながら動作を確かめた方が理解が早そう。
program main implicit none integer :: i, j, b1, b2, h1, h2, o1, o2 o1 = 5 o2 = 21 b1 = b'00000101' b2 = b'00010101' h1 = x'05' h2 = x'15' write(*, *) "octal output" write(*, '(o4, o4, o4)') o1, o2, o1+o2 write(*, '(o4, o4, o4)') b1, b2, b1+b2 write(*, '(o4, o4, o4)') h1, h2, h1+h2 write(*,*) "hexadecimal output" write(*, '(z4, z4, z4)') o1, o2, o1+o2 write(*, '(z4, z4, z4)') b1, b2, b1+b2 write(*, '(z4, z4, z4)') h1, h2, h1+h2 write(*,*) "bit calculation for 0x05 and 0x15" write(*, '(a5, z4)') "AND", iand(b1, b2) write(*, '(a5, z4)') "OR", ior(b1, b2) write(*, '(a5, z4)') "XOR", ieor(b1, b2) write(*, '(a5, z16)') "NOT", not(b1) write(*, '(1x,a,$)') "(i,j) |" do i = 0, 1 do j = 0, 1 write(*, '(1x, a,i1,a,i1,a, 1x,$)') & & "(", i, ",", j, ")" end do end do write(*,*) write(*, '(1x,a,$)') " AND |" do i = 0, 1 do j = 0, 1 write(*, '(3x, i1, a,$)') iand(i,j), " " end do end do write(*,*) write(*, '(1x,a,$)') " OR |" do i = 0, 1 do j = 0, 1 write(*, '(3x, i1, a,$)') ior(i,j), " " end do end do write(*,*) write(*, '(1x,a,$)') " XOR |" do i = 0, 1 do j = 0, 1 write(*, '(3x, i1, a,$)') ieor(i,j), " " end do end do write(*,*) end program main
結果
octal output 5 25 32 5 25 32 5 25 32 hexadecimal output 5 15 1A 5 15 1A 5 15 1A bit calculation for 0x05 and 0x15 AND 5 OR 15 XOR 10 NOT FFFFFFFA (i,j) | (0,0) (0,1) (1,0) (1,1) AND | 0 0 0 1 OR | 0 1 1 1 XOR | 0 1 1 0