[Tutorial] 32 слота одной переменной - Printable Version
+- SA-MP Forums Archive (
https://sampforum.blast.hk)
+-- Forum: Non-English (
https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (
https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (
https://sampforum.blast.hk/forumdisplay.php?fid=32)
+----- Forum: Релизы/Releases (
https://sampforum.blast.hk/forumdisplay.php?fid=66)
+----- Thread: [Tutorial] 32 слота одной переменной (
/showthread.php?tid=542550)
32 слота одной переменной -
SoNikMells - 20.10.2014
Давненько хотел поместить в одну переменную несколько значений, и я добрался до своего желаемого.
pawn Code:
new bool:Arr0;
new bool:Arr1;
new bool:Arr2;
//и т.д. до 32
Это заняло бы у нас
128 байт (4*32)
В нашем-же случаи нужна всего одна переменная:
И на этом мы сэкономим
124 байт. Довольно не мало — согласитесь.
А затратили мы на 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 переменных типа
bool занимая
265 байт
(2120 бит) либо
использовать данные макросы имея всё те-же
64 слота, а занимая всего
8 байт
(64 бит).
Автор: SoNik))
Re: 32 слота одной переменной -
OKStyle - 20.10.2014
Где-то я уже это видел.
Re: 32 слота одной переменной -
Stepashka - 20.10.2014
Топикстартер открыл для себя бинарную арифметику?!
Re: 32 слота одной переменной -
OKStyle - 21.10.2014
https://sampforum.blast.hk/showthread.php?tid=332649 вот тут, наверное, я видел.
Re: 32 слота одной переменной -
SoNikMells - 21.10.2014
Увидев несколько
макросов подумал, зачем мне 1..15 числа на 8 слотов, если нужно всего-то 0..1 да и слотов явно будет больше. Изучил побитовые операторы и сделал то, что меня интересовало не видя не единой темы с манипуляциями по 1 биту.
Re: 32 слота одной переменной -
jhonyxakep - 23.10.2014
Скоро изобретут BCD числа