Работа с битовыми масками
Команды BitClear, BitSet, BitTest, NBitClear, NBitSet, NBitTest
INTEGER BitClear(INTEGER <iValue>, INTEGER <iMask>)
Функция сбрасывает (обнуляет) биты в <iValue>
, для которых в <iMask>
стоит значение 1. Остальные биты в <iValue>
не изменяются. Функция возвращает результирующее значение.
INTEGER BitSet(INTEGER <iValue>, INTEGER <iMask>)
Функция устанавливает в единицу биты в <iValue>
, для которых в <iMask>
стоит значение 1. Остальные биты в <iValue>
не изменяются. Функция возвращает результирующее значение.
INTEGER BitTest(INTEGER <iValue>, INTEGER <iMask>)
Если хотя бы один бит в <iValue>
, для которых в <iMask>
стоит значение 1, равен единице, то функция возвращает 1, иначе - возвращает 0.
INTEGER NBitClear(INTEGER <iValue>, INTEGER <nBit>)
Функция сбрасывает (обнуляет) один бит с номером <nBit>
в <iValue>
. Значения <nBit>
могут быть от 1 (крайний правый) до 32 (крайний левый). Функция возвращает результирующее значение.
INTEGER NBitSet(INTEGER <iValue>, INTEGER <nBit>)
Функция устанавливает в единицу один бит с номером <nBit>
в <iValue>
. Значения <nBit>
могут быть от 1 (крайний правый) до 32 (крайний левый). Функция возвращает результирующее значение.
INTEGER NBitTest(INTEGER <iValue>, INTEGER <nBit>)
Если один бит с номером <nBit>
в <iValue>
равен 1, функция возвращает 1. В противном случае, функция возвращает 0. Значения <nBit>
могут быть от 1 (крайний правый) до 32 (крайний левый).
Немного теории по битовым маскам.[править | править код]
Далее в описании некоторых функций используется не номер бита, а записи вида 0x40000000 или 0x00000080. Для того что бы понять какой это номер бита можно воспользоваться ниже приведённой таблицей.
- 1 : 0x00000001, #'0b00000000000000000000000000000001', 2**0 , 1,
- 2 : 0x00000002, #'0b00000000000000000000000000000010', 2**1 , 2,
- 3 : 0x00000004, #'0b00000000000000000000000000000100', 2**2 , 4,
- 4 : 0x00000008, #'0b00000000000000000000000000001000', 2**3 , 8,
- 5 : 0x00000010, #'0b00000000000000000000000000010000', 2**4 , 16,
- 6 : 0x00000020, #'0b00000000000000000000000000100000', 2**5 , 32,
- 7 : 0x00000040, #'0b00000000000000000000000001000000', 2**6 , 64,
- 8 : 0x00000080, #'0b00000000000000000000000010000000', 2**7 , 128,
- 9 : 0x00000100, #'0b00000000000000000000000100000000', 2**8 , 256,
- 10 : 0x00000200, #'0b00000000000000000000001000000000', 2**9 , 512,
- 11 : 0x00000400, #'0b00000000000000000000010000000000', 2**10, 1024,
- 12 : 0x00000800, #'0b00000000000000000000100000000000', 2**11, 2048,
- 13 : 0x00001000, #'0b00000000000000000001000000000000', 2**12, 4096,
- 14 : 0x00002000, #'0b00000000000000000010000000000000', 2**13, 8192,
- 15 : 0x00004000, #'0b00000000000000000100000000000000', 2**14, 16384,
- 16 : 0x00008000, #'0b00000000000000001000000000000000', 2**15, 32768,
- 17 : 0x00010000, #'0b00000000000000010000000000000000', 2**16, 65536,
- 18 : 0x00020000, #'0b00000000000000100000000000000000', 2**17, 131072,
- 19 : 0x00040000, #'0b00000000000001000000000000000000', 2**18, 262144,
- 20 : 0x00080000, #'0b00000000000010000000000000000000', 2**19, 524288,
- 21 : 0x00100000, #'0b00000000000100000000000000000000', 2**20, 1048576,
- 22 : 0x00200000, #'0b00000000001000000000000000000000', 2**21, 2097152,
- 23 : 0x00400000, #'0b00000000010000000000000000000000', 2**22, 4194304,
- 24 : 0x00800000, #'0b00000000100000000000000000000000', 2**23, 8388608,
- 25 : 0x01000000, #'0b00000001000000000000000000000000', 2**24, 16777216,
- 26 : 0x02000000, #'0b00000010000000000000000000000000', 2**25, 33554432,
- 27 : 0x04000000, #'0b00000100000000000000000000000000', 2**26, 67108864,
- 28 : 0x08000000, #'0b00001000000000000000000000000000', 2**27, 134217728,
- 29 : 0x10000000, #'0b00010000000000000000000000000000', 2**28, 268435456,
- 30 : 0x20000000, #'0b00100000000000000000000000000000', 2**29, 536870912,
- 31 : 0x40000000, #'0b01000000000000000000000000000000', 2**30, 1073741824
- 32 : 0x80000000, #'0b10000000000000000000000000000000', 2**31, 2147483648