
Не подскажите ли, как организовать подобное на VB.
Имеется флаговое Long, в котором нужно отдельно устанавливать/считывать разряды. Проблема в старшем бите - значение 2^31 VB не хочет понимать, возникает Overflow (что и понятно)
Сейчас у меня сделано так (код набирал по памяти, возможны опечатки):
- Код: Выделить всё
'Определение значения бита
Function CheckBit(ByVal Value As Long, ByVal Bit As Long) As Boolean
If Bit = 31 Then
CheckBit = (Value < 0)
Else
CheckBit = ((Value And (2^Bit)) = (2^Bit))
End If
End Function
'"Сборка" числа из битов (массив 0...31)
Function CompileBits(Bits() As Boolean) As Long
Dim I As Long, ret As Long
For I = 0 To 31
If I = 31 Then
If Bits(I) Then ret = ret + &h80000000
Else
If Bits(I) Then ret = ret Or (2^I)
End If
Next I
CompileBits = ret
End Function
Все работает, но хотелось бы избавиться от If Bit = 31, это реально?
Я пробовал вначале прибавлять &h80000000, затем проводить логические операции, затем снова отнимать &h80000000, но что-то не то -- 2@^31 он все-равно приводит к Long и возникает переполнение, хотя результат должен уместиться в Long.