Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Библиотека функций для побитовой работы с числами

Статус
В этой теме нельзя размещать новые ответы.

iGuarDD

Ученик
Трям всем,с вами Яжка

Сегодня я солью свою библиотеку битовых операций
С её помощью можно хранить в 1 переменной до 32 различных значений,при том условии,что их суммарная максимальная битовая длина не превышает 32 (в силу некоторой специфики может быть и 64,и различные другие значения,но это — экзотика)

Я не буду описывать практическое применение этим функциям
И,кстати,эта библиотека не предназначена для новичков (если конечно Вы не видите способа применения этим функциям)
Кому нужно — увидят их пользу и способы применения)

К слову,эта библиотека является хорошей альтернативой "флагам" (на форуме есть тема по ним)
Разница лишь в удобстве и функционале

Итак,вот сами функции
PHP:
stock _getBitLen(var,&c = 1) // Возвращает битовую длину числа
{
// var — исходное число,длина которого будет возвращена
// c — не обязательный аргумент,в него будет записана сама длина
	while(var >>>= 1) c++;
 	return c;
}

stock _getBit(const var,const bit) return (var >>> bit) & 0b1; // Возвращает значение указанного бита
// var — исходное число,из которого будет извлечено значение бита
// bit — номер извлекаемого бита

stock _getBits(const var,const pos,const len) return (var >>> pos) & ((0b1 << len) - 1); // Возвращает массив битов (в виде двоичного числа) из отрезка
// var — исходное число,из которого будет извлечён массив битов
// pos — начало отрезка
// end — длина отрезка

stock _setBit(&var,const bit,const set) return var = (var & (0xFFFFFFFF - (0b1 << bit))) | (set << bit); // Устанавливает значение указанного бита
// var — переменная,значение указанного бита которой будет изменено
// bit — номер изменяемого бита
// set — устанавливаемое значение (0 или 1)

stock _insBits(&var,const subvar,const pos,const len) return var = (var & 0xFFFFFFFF - (((0b1 << len) - 1) << pos)) | (subvar << pos); // Возвращает результат вставки в число массива битов
// var — переменная,в которую будет вставлен массив
// subvar — сам массив (в виде обычной целочисленной переменной)
// pos — начало отрезка
// len — количество извлекаемых битов из массива

stock _invBit(&var,const bit) return var ^= (0b1 << bit); // Инвертирует указанный бит
// var — переменная,значение указанного бита которой будет инвертировано
// bit — номер инвертируемого бита

stock _invBits(&var,const pos,const len) return var ^= (((0b1 << len) - 0b1) << pos); // Инвертирует биты из указанного отрезка
// var — переменная,отрезок битов которой будет инвертирован
// pos — начало отрезка
// len — длина отрезка

stock _clearBit(&var,const bit) return var &= (0xFFFFFFFF - (0b1 << bit));// Устанавливает значение 0 указанному биту (очищает его.Быстрее _setBit(var,bit,0))
// var — переменная,указанный бит которой будет очищен
// bit — номер очищаемого бита

stock _clearBits(&var,const pos,const len) return var &= var & 0xFFFFFFFF - (((0b1 << len) - 1) << pos); // Устанавливает значение 0 всем битам из указанного отрезка (очищает его.Быстрее _insBits(var,pos,len,0))
// var — переменная,отрезок битов которой будет очищен
// pos — начало отрезка
// len — длина отрезка
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу