Работа с битовыми масками

Материал из K3-Macro
(перенаправлено с «NBitClear»)
Макро | Математические функции | Алгебраические и тригонометрические функции | Функции работы с матрицами | Функции аффинных преобразований | Работа с векторами | Функции геометрических вычислений | Преобразование координат точек и векторов | Работа с битовыми масками

Команды 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

Макро | Математические функции | Алгебраические и тригонометрические функции | Функции работы с матрицами | Функции аффинных преобразований | Работа с векторами | Функции геометрических вычислений | Преобразование координат точек и векторов | Работа с битовыми масками