Побитовые целочисленные операции
Эти функции позволяют работать с целыми числами как с битовыми структурами, представляющими дополнительные значения в двоичной системе исчисления, где у позиции бита N вес 2**N. Биты нумеруются от нуля и выше. При этих операциях бит знака целого числа отнесен на неопределенную позицию слева. Таким образом, над каждым старшим битом у положительного целого числа будет находиться 0 бит, а у отрицательного - 1 бит.
| Функция | Результат | Описание |
|---|---|---|
~~ INT1
|
Целое | Создает побитовое дополнение целого числа INT1. То есть, в результате 1 находится на каждой битовой позиции, в которой у числа INT1 был 0. Всегда верно равенство ~~ INT = –(INT + 1).
|
INT1 || INT2
|
Целое | Результат этой операции - побитовое "ИЛИ включительное" для двух целых чисел, INT1 и INT2. То есть, в результате будет 1 на каждой битовой позиции, для которой 1 есть или в числе INT1, или в INT2, или в обоих числах. |
INT1 ||/& INT2
|
Целое | Результат этой операции - побитовое "ИЛИ исключительное" для двух целых чисел, INT1 и INT2. То есть, в результате будет 1 на каждой битовой позиции, для которой 1 есть или в числе INT1, или в INT2, но не в обоих числах одновременно. |
INT1 && INT2
|
Целое | Результат - это побитовое "И" целых чисел INT1 и INT2. То есть, в результате будет 1 на каждой битовой позиции, для которой 1 есть и в числе INT1, и в INT2. |
INT1 &&~~ INT2
|
Целое | Результат - это побитовое "И" числа INT1 и побитового дополнения числа INT2. То есть, в результате будет 1 на каждой битовой позиции, для которой в числе INT1 есть 1, а в числе INT2 - 0. Это то же самое, что и INT1 && (~~INT2), и может быть полезно для очистки битов набора INT1 в INT2. |
INT << N
|
Целое | Создает битовую структуру числа INT1, сдвинутую влево на N позиций. При отрицательном значении N возникает сдвиг вправо. |
INT >> N
|
Целое | Создает битовую структуру числа INT1, сдвинутую вправо на N позиций. При отрицательном значении N возникает сдвиг влево. |
INT1 &&=_0 INT2
|
Логический | Эквивалентно логическому выражению INT1 &&
INT2 /== 0, но более эффективно. |
INT1 &&/=_0 INT2
|
Логический | Эквивалентно логическому выражению INT1 &&
INT2 == 0, но более эффективно. |
integer_bitcount(INT)
|
Целое | Считает количество битов 1 или 0 в представлении двоичного дополнения числа INT. Если INT не отрицательное, N - это количество бит 1. Если INT отрицательное, это количество бит 0. Из-за знакового расширения существует бесконечное число бит 0 в неотрицательном числе или бит 1 в отрицательном числе. Всегда выполнено равенство integer_bitcount(INT) = integer_bitcount(-(INT+1)). |
integer_leastbit(INT)
|
Целое | Возвращает положение N младшего бита, заданного для целого числа INT. N - эта наибольшая степень двойки, на которую нацело делится INT. |
integer_length(INT)
|
Целое | Возвращает длину в битах числа INT как целого в представлении двоичного дополнения. То есть, N - это наименьшее целое, такое что INT <
(1 << N) если INT >= 0 INT >= (–1 << N) если INT <
0. Если INT неотрицательное, для представления INT как целого числа без знака требуется по меньшей мере N бит. Как вариант, для представления INT как целого со знаком требуется как минимум N+1 бит независимо от его знака. |
testbit(INT, N)
|
Логический | Проверяет бит в положении N для целого числа INT и возвращает состояние бита N как логическое значение, равное true для 1 и false для 0. |