И так хочу вам рассказать про битовые оператора и как их можно использовать в pawn для новичков в этом :)))
Существуют такие побитовые операторы как:
| ИЛИ
& И
^ Исключающее ИЛИ
~ Отрицание
<< сдвиг влево
>> сдвиг вправо
В Pawn языке используются ячейки. в 1 ячейки 4 байта, в каждом байте 8 бит, 1 бит это 0(ложь) или 1(истина)
1 ячейка может хранить число от -2 147 483 647 до 2 147 483 647
Так как в ячейке используется десятичные цифры, чтобы записать в ячейку битовое(двоичное) число перед числом нужно ввести 0b
new chislo = 0b11111111; // в десятичной системе это число выглядит так: 255
Рассмотрим оператор "|" (ИЛИ):
Если хоть один из битов равен 1 соответствующий ставится 1(истиной)
пример:
PHP код:
new a,b,с;
a = 0b10010; //
b = 0b10011; //
c = a|b; // в результате получим 0b11011
как так вышло:
// нули перед цифрами не пишутся, но процессор их видит так)
/*
a = 00000000 00000000 00000000 00010010
b = 00000000 00000000 00000000 00010011
c = 00000000 00000000 00000000 00010011
*/
Рассмотрим оператор "&" (И):
Любой бит равный 0 ставит соответствующий бит в 0(ложь)
пример:
PHP код:
new a,b,с;
a = 0b10010; //
b = 0b10011; //
c = a&b; // в результате получим 0b10010
как так вышло:
/*
a = 00000000 00000000 00000000 00010010
b = 00000000 00000000 00000000 00010011
c = 00000000 00000000 00000000 00010010
*/
Рассмотрим оператор "^" (Исключающее ИЛИ):
исключающее ИЛИ выдает истину, если только один из битов истинен
пример:
PHP код:
new a,b,с;
a = 0b11000; // число 8 в десятичной
b = 0b10011; //
c = a^b; // в результате получим 0b1011
как так вышло:
/*
a = 00000000 00000000 00000000 00011000
b = 00000000 00000000 00000000 00010011
c = 00000000 00000000 00000000 00001011
*/
Рассмотрим оператор "<<" (сдвиг влево):
Это просто) движение битов влево. (важно: при движении влево биты которые стояли слева сотрутся на количество сдвинутых бит)
пример:
PHP код:
new a,b;
a = 0b1000; // число 8 в десятичной
b = a<<2; // сдвинули на 2 бита влево
как так вышло:
/*
a = 00000000 00000000 00000000 00001000
b = 00000000 00000000 00000000 00100000
*/
Рассмотрим оператор ">>" (сдвиг вправо):
PHP код:
new a,b;
a = 0b1000; // число 8 в десятичной
b = a>>2; // сдвинули на 2 бита влево
как так вышло:
/*
a = 00000000 00000000 00000000 00001000
b = 00000000 00000000 00000000 00000010
*/
Рассмотрим оператор "~" (отрицание:
PHP код:
new a; // по умолчанию она в битах выглядит так 00000000 00000000 00000000 00000000
new b = ~a; // сделав отрицание все биты станут противоположны то есть так: 11111111 11111111 11111111 11111111
Как всё это можно использовать:
допустим в 1 ячейке хранить лицензии игрока
допустим
PHP код:
new licenze;
licenze = 0b001010 // допустим смотря справа налево лицензии А(нету) B(есть) C(нету) D(есть) E(нету) F(нету)
для проверки:
PHP код:
if(licenze & 1) SendClientMessage(playerid,-1,"У вас есть лицензия A");
if(licenze & (1<<1)) SendClientMessage(playerid,-1,"У вас есть лицензия B");
if(licenze & (1<<2)) SendClientMessage(playerid,-1,"У вас есть лицензия C");
if(licenze & (1<<3)) SendClientMessage(playerid,-1,"У вас есть лицензия D");
if(licenze & (1<<4)) SendClientMessage(playerid,-1,"У вас есть лицензия E");
if(licenze & (1<<5)) SendClientMessage(playerid,-1,"У вас есть лицензия F");
PS: Писал от руки не проверяя:) Тема будет дополнятся и исправляться