NAME

Pcore::Util::Bit - bitwise operations with mask

SYNOPSIS

Pcore::Util::Bit::set_bit($binary, $mask[, $bits]);
Pcore::Util::Bit::clear_bit($binary, $mask[, $bits]);
Pcore::Util::Bit::inverse_bit($binary, $mask);

Pcore::Util::Bit::set_bit(0b1111_0000, 0b0011_1000);           # returns 0b1111_1000
Pcore::Util::Bit::set_bit(0b1111_0000, 0b0011_1000, 0b101);    # returns 0b1110_1000

Pcore::Util::Bit::clear_bit(0b1111_0000, 0b0011_1000);         # returns 0b1100_0000
Pcore::Util::Bit::clear_bit(0b1111_0000, 0b0011_1000, 0b101);  # returns 0b1101_0000

Pcore::Util::Bit::inverse_bit(0b1111_0000, 0b0011_1000);       # returns 0b1100_1000

METHODS

set_bit, clear_bit

$mask shows which bits in $binary we would like to modify. Other bits will stay untouched.

In two-params call all corresponding bits in $binary value will be setted or cleared correspondently.

In three-params set_bit() call all corresponding bits in $binary value will be setted as it defined in $bits value.

In three-params clear_bit() call all corresponding bits in $binary value will be setted as it defined in inversed $bits value.

  76543210
0b10101010 - $binary
0b00110011 - $mask
0b00110000 - $bits
-----------
set_bit($binary, $mask, $bits)   - bits[5, 4] - will be setted,  bits[1, 0] - will be cleared
clear_bit($binary, $mask, $bits) - bits[5, 4] - will be cleared, bits[1, 0] - will be setted

Result returned if expected otherwise $binary value will be modified in-place.

inverse_bit

Accept only two parameters: $binary and $mask.

Inverse corresponding bits in $binary value according to $mask.

NOTE: this operation is simple XOR.

А ТЕПЕРЬ НА РУССКОМ

Маска определяет, какие биты будем модифицировать в исходном скаляре. Остальные биты не будут затронуты ни при каких условиях.

set_bit(), clear_bit() с ДВУМЯ параметрами устанавливает или обнуляет ВСЕ биты, попадающие под маску, соответственно.

Дополнительный ТРЕТИЙ параметр $bits позволяет указать как именно модифицировать биты, попадающие под маску:

  • set_bit() - устанавливает биты под маской в те значения, которые соответствуют им в $bits соответственно. Т.е. 1 биты в $bits будут 1 в $binary, 0 в $bits будут 0 в $binary. Вызов set_bit($a, $b) эквивалентен вызову set_bit($a, $b, $b), так как в обоих случаях устанавливаются все биты под маской;

  • clear_bit() - то-же, что и clear_bit с инвертированным $bits параметром;

WARNING

Bitwise operators limited to a certain number of bits (32 bits of 64 bits, depending on your architecture). If we go over this, we'll get an error.