2014-01-27 3 views
0

У меня есть код в Fortran, где я использовал для следующей подпрограммыFortran на C# конверсии

subroutine bit_mask(inum) 
    integer*2 inum 
integer*2 iclass,ident,length 
common/header/ iclass,ident,length 

iclass = iand(inum,'F000'X) 
iclass = ishft(iclass, -12) 
ident = iand(inum,'0FE0'X) 
ident = ishft(ident, -5) 
length = iand(inum,'001F'X) 
c  write(*,*) 'Class/Identifier/Length =',iclass,ident,length 
return 
end 

Теперь я хотел, чтобы преобразовать его в C#. Пожалуйста, помогите мне. что IAND будут сброшены в C# и ishft эквивалентном C#

ответ

1

iand будет эквивалентно bitwise and operator &

ishift со вторым параметром меньше, чем 0 будет эквивалентно right-shift operator >>

iclass = inum & 0xf000; 
iclass = iclass >> 12; 
ident = inum & 0xfe0; 
ident = ident >> 5; 
length = inum & 0x1f; 

Это выглядит как код извлекает целочисленные поля из двух байтовых целых чисел:

4 bits = iclass 
7 bits = ident 
9 bits = inum 

0xf000 == 0y1111 0000 0000 0000 
0x0fe0 == 0y0000 1111 1110 0000 
0x001f == 0y0000 0000 0001 1111 

После того, как вы выбрали значение, оно смещается в правильное положение:

 0xa024 == 0y1010 0000 0010 0100 
&  0xf000 == 0y1111 0000 0000 0000 
-------------------------------------- 
     0xa000 == 0y1010 0000 0000 0000 
>> 12 
-------------------------------------- 
     0x000a == 0y0000 0000 0000 1010 
Смежные вопросы