20.10.2014, 02:20
(
Last edited by SoNikMells; 19/02/2015 at 12:50 AM.
)
Давненько хотел поместить в одну переменную несколько значений, и я добрался до своего желаемого.
Это заняло бы у нас 128 байт (4*32)
В нашем-же случаи нужна всего одна переменная:
И на этом мы сэкономим 124 байт. Довольно не мало — согласитесь.
А затратили мы на 32 слота — 4 байта, всего по 1 биту на слот.
1 байт = 8 бит
4 байт = 32 бит
И решил я написать несколько макросов для использования всей этой фигни
С их помощью возможно изменять значение на 1 или 0 (true | false) для каждого слота.
А так-же узнать заполнен-ли определённый слот.
*
*
*
Описание:
Вот и решайте, использовать 64 переменных типа bool занимая 265 байт(2120 бит) либо
использовать данные макросы имея всё те-же 64 слота, а занимая всего 8 байт(64 бит).
Автор: SoNik))
pawn Code:
new bool:Arr0;
new bool:Arr1;
new bool:Arr2;
//и т.д. до 32
В нашем-же случаи нужна всего одна переменная:
pawn Code:
new Arr;
А затратили мы на 32 слота — 4 байта, всего по 1 биту на слот.
1 байт = 8 бит
4 байт = 32 бит
И решил я написать несколько макросов для использования всей этой фигни
С их помощью возможно изменять значение на 1 или 0 (true | false) для каждого слота.
А так-же узнать заполнен-ли определённый слот.
*
*
*
Описание:
- variable — переменная
- slot — слот (0..31)
- setBit_1(variable, slot);* * — устанавливает true(1) в заданный слот
- setBit_0(variable, slot);* * — устанавливает false(0) в заданный слот
- getBit(variable, slot);* *** — возвращает true(1) - слот заполнен, false(0) - слот пустует
- addBit(variable);* * * * * *— устанавливает все слоты (0..31) в true(1)
- delBit(variable);* * * * * * — устанавливает все слоты (0..31) в false(0)
pawn Code:
#define setBit_1(%1,%2) %1|=(1<<%2)
#define setBit_0(%1,%2) %1&=~(1<<%2)
#define getBit(%1,%2) ((1<<%2)&%1?1:0)
#define addBit(%1) %1=-1
#define delBit(%1) %1=0
использовать данные макросы имея всё те-же 64 слота, а занимая всего 8 байт(64 бит).
Автор: SoNik))