Поскольку это коммутативные и ассоциативные операторы, я не вижу причин, по которым их следует ограничивать двумя аргументами.
Я могу использовать следующую функцию VBA, которую я написал для неотрицательных значений Long
до 2 31, но она переполнится для чего-то большего.
Function RangeBitOr(rng As Range) As Long
Dim i As Long
Dim cell As Range
i = 0
For Each cell In rng
i = i Or CLng(cell.Value)
Next cell
RangeBitOr = i
End Function
Встроенные функции Excel BITAND
и BITOR
(представленные в Excel 2013) могут обрабатывать значения вплоть до 2 48 - 1, и я бы хотел, чтобы эта возможность была применена к диапазону.
Есть ли простой способ заставить эти битовые операторы работать в диапазоне до этого предела?
Я пробовал пару обходных путей:
Создание двух новых столбцов и использование
MOD
для разделения больших значений на два меньших, затем использование моей функцииRangeBitOr
для каждого из них, а затем повторное объединение значений.Создание столбца для функции
BITOR
для объединения текущего агрегата с текущим значением и принятие последнего в качестве общегоBITOR
для диапазона.
В идеале я хотел бы иметь решение, которое не требует вспомогательных столбцов или VBA, но я открыт для любых полезных предложений.
Debug.Print TypeName(Range("A1").Value)
. - person Comintern   schedule 05.08.2016Long
наLongLong
, а приведениеCLng()
кCLngLng()
. - person Comintern   schedule 05.08.2016Double
, может быть потеря точности приведения, если входное значение больше 9,007,199,254,740,992. - person Comintern   schedule 05.08.2016