program darstellung *--------------------------------------------------------------- * Darstellung von Zahlen auf dem Computer * gfortran -fno-range-check darstellung.f -o darstellung *--------------------------------------------------------------- implicit none * integer*1 I1 integer*4 i,I4,IR4 * real*4 R4 real*8 R8 EQUIVALENCE(R4,IR4) ! einer der gefährlichsten FORTRAN-Befehle * complex*16 C16,D16,ui * character Version*50 * ui = DCMPLX(0.d0,1.d0) Version= '# darstellung 02 Juergen Schnack 03. 05. 2016' *--------------------------------------------------------------- * * Version * write(6,'(a)') Version *--------------------------------------------------------------- * result = IBITS (i, pos, len) * The rightmost (least significant) bit of i is in position 0 * * I1 integer*1 ist 1 byte = 8 bit lang * write(6,'(a)') '# integer*1' I1 = 16 write(6,'(i4,a)',advance="no") I1,' = ' do i=7,0,-1 write(6,'(i2)',advance="no") IBITS(I1,i,1) enddo write(6,*) I1 = 31 write(6,'(i4,a)',advance="no") I1,' = ' do i=7,0,-1 write(6,'(i2)',advance="no") IBITS(I1,i,1) enddo write(6,*) I1 = 127 write(6,'(i4,a)',advance="no") I1,' = ' do i=7,0,-1 write(6,'(i2)',advance="no") IBITS(I1,i,1) enddo write(6,*) I1 = -127 write(6,'(i4,a)',advance="no") I1,' = ' do i=7,0,-1 write(6,'(i2)',advance="no") IBITS(I1,i,1) enddo write(6,*) I1 = 128 write(6,'(i4,a)',advance="no") I1,' = ' do i=7,0,-1 write(6,'(i2)',advance="no") IBITS(I1,i,1) enddo write(6,*) I1 = -128 write(6,'(i4,a)',advance="no") I1,' = ' do i=7,0,-1 write(6,'(i2)',advance="no") IBITS(I1,i,1) enddo write(6,*) I1 = 255 write(6,'(i4,a)',advance="no") I1,' = ' do i=7,0,-1 write(6,'(i2)',advance="no") IBITS(I1,i,1) enddo write(6,*) I1 = -16 write(6,'(i4,a)',advance="no") I1,' = ' do i=7,0,-1 write(6,'(i2)',advance="no") IBITS(I1,i,1) enddo write(6,*) I1 = 32768 write(6,'(i4,a)',advance="no") I1,' = ' do i=7,0,-1 write(6,'(i2)',advance="no") IBITS(I1,i,1) enddo write(6,*) *--------------------------------------------------------------- * result = IBITS (i, pos, len) * The rightmost (least significant) bit of i is in position 0 * * I4 integer*4 ist 4 byte = 4x8 bits lang * write(6,'(a)') '# integer*4' I4 = 16 write(6,'(i4,a)',advance="no") I4,' = ' do i=31,0,-1 write(6,'(i2)',advance="no") IBITS(I4,i,1) enddo write(6,*) I4 = 31 write(6,'(i4,a)',advance="no") I4,' = ' do i=31,0,-1 write(6,'(i2)',advance="no") IBITS(I4,i,1) enddo write(6,*) I4 = 127 write(6,'(i4,a)',advance="no") I4,' = ' do i=31,0,-1 write(6,'(i2)',advance="no") IBITS(I4,i,1) enddo write(6,*) I4 = 128 write(6,'(i4,a)',advance="no") I4,' = ' do i=31,0,-1 write(6,'(i2)',advance="no") IBITS(I4,i,1) enddo write(6,*) I4 = -127 write(6,'(i4,a)',advance="no") I4,' = ' do i=31,0,-1 write(6,'(i2)',advance="no") IBITS(I4,i,1) enddo write(6,*) I4 = -128 write(6,'(i4,a)',advance="no") I4,' = ' do i=31,0,-1 write(6,'(i2)',advance="no") IBITS(I4,i,1) enddo write(6,*) I4 = 255 write(6,'(i4,a)',advance="no") I4,' = ' do i=31,0,-1 write(6,'(i2)',advance="no") IBITS(I4,i,1) enddo write(6,*) I4 = -16 write(6,'(i4,a)',advance="no") I4,' = ' do i=31,0,-1 write(6,'(i2)',advance="no") IBITS(I4,i,1) enddo write(6,*) *--------------------------------------------------------------- * * R4 real*4 (C: float) 4 byte = 4x8 bits lang * write(6,'(a)') '# real*4' R4 = 1.0 write(6,'(f15.6,a)',advance="no") R4,' = ' do i=31,0,-1 write(6,'(i2)',advance="no") IBITS(IR4,i,1) enddo write(6,*) R4 = -1.0 write(6,'(f15.6,a)',advance="no") R4,' = ' do i=31,0,-1 write(6,'(i2)',advance="no") IBITS(IR4,i,1) enddo write(6,*) R4 = 0.5 write(6,'(f15.6,a)',advance="no") R4,' = ' do i=31,0,-1 write(6,'(i2)',advance="no") IBITS(IR4,i,1) enddo write(6,*) R4 = 0.75 write(6,'(f15.6,a)',advance="no") R4,' = ' do i=31,0,-1 write(6,'(i2)',advance="no") IBITS(IR4,i,1) enddo write(6,*) R4 = 1.d0/0.d0 write(6,'(f15.6,a)',advance="no") R4,' = ' do i=31,0,-1 write(6,'(i2)',advance="no") IBITS(IR4,i,1) enddo write(6,*) *--------------------------------------------------------------- * * FORTRAN beherrscht komplexe Zahlen!!! * write(6,'(a)') '# complex*16' C16 = DCMPLX(1.0,1.0) D16 = DCMPLX(1.0,-1.0) write(6,*) 'C16 = ',C16 write(6,*) 'D16 = ',D16 write(6,*) 'C16 * D16 = ',C16 * D16 *--------------------------------------------------------------- * * Schluss * 9999 continue write(6,'(a)') '# Fertig!' stop end