Комментарии/ответы выше «могут .Не быть» правильными ответами, в зависимости от вашей конечной цели.
Вероятной целью этого оператора «WORD = ..» является .NOT. для получения логического/логического результата, а скорее для получения своего рода целочисленного перечислителя.
Чтобы увидеть это, сначала «игнорируйте» сдвиг битов (iShift() и т. д.) и просто посмотрите на что-то вроде IntR = Int1 .Or. Int2. Это даст «правильный» целочисленный результат. Значение будет зависеть не только от значений int, но и от их объявленного «типа» (например, Integer (1), Integer (2) и т. д.)
То есть результирующее значение WORD будет «правильным» целым числом; что-то вроде "33504" .. или как там, (вероятно). НЕ. a 0/1 или -1/0 или .Истина./.Ложь. и т.д
Если вы замените = Int1 .Or. Int2 с = (Int1 /= 0) .Или. (Int2/= 0)... вы получите "целочисленное логическое" (т.е. 0/1 и т.д.) и НЕ БУДЕТ создавать желаемый счетчик... если это то, что вы ищете.
.Или. на двух Int - это своего рода побитовое сложение, которое создает новое число в зависимости от того, как биты выравниваются/размер слова и т. д.
e.g. 3 == 011, 2 = 010 ... so, 3 .Or. 2 ==> 011 = 3
e.g. 3 == 011, 5 = 101 ... so, 3 .Or. 5 ==> 111 = 7
e.g. 5 == 101, 5 = 101 ... so, 5 .Or. 5 ==> 101 = 5
... аналогично .И. обеспечивает своего рода умножение.
Этот метод иногда используется для создания перечислителей, что-то вроде использования степеней двойки (1,2,4,8...) для присвоения значения. Затем любую сумму этих значений можно разложить, например, на составляющие ее элементы. Например, если a(1) = 2 и a(2) = 8, то сумму 10 можно разложить, чтобы показать, что выборы были 1-м и 4-м элементами (1,2,4,8,...) и Т. Д.
Это может помочь осмыслить это, заметив, что сдвиг битов подобен умножению на 2 (для сдвига влево) и делению на 2 (для сдвига вправо).
Кстати, для этого вам не нужно ограничиваться Fortran. Вбейте его в функцию VBA и посмотрите результат в вашей электронной таблице. VBA не имеет встроенных функций сдвига битов, но они доступны ... в любом случае он продемонстрирует Int1 .Or. Поведение Int2 даже без смещения битов, например
Function TwoIntsOr(Int1 As Long, Int2 As Long) As Long
'
TwoIntsOr = Int1 Or Int2
'
End Function
-- .Или. на Фортране
Function TwoIntsOr(Int1, Int2)
Integer :: TwoInstOr
Integer, Intent(In) :: Int1, Int2
!
TwoIntsOr = Int1 .Or. Int2
!
End Function
).
person
DrOli
schedule
21.01.2014