Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 3 из 3
  1. #1
    Аватар для Pop
    Пользователь

    Статус
    Оффлайн
    Регистрация
    06.11.2013
    Сообщений
    9
    Репутация:
    3 ±

    Побитовые операторы

    И так хочу вам рассказать про битовые оператора и как их можно использовать в 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,с;
    0b10010//
    0b10011// 
    a|b// в результате получим 0b11011
    как так вышло:
    // нули перед цифрами не пишутся, но процессор их видит так)
    /*
    a = 00000000 00000000 00000000 00010010 
    b = 00000000 00000000 00000000 00010011 
    c = 00000000 00000000 00000000 00010011
    */ 
    Рассмотрим оператор "&" (И):
    Любой бит равный 0 ставит соответствующий бит в 0(ложь)
    пример:
    PHP код:
    new a,b,с;
    0b10010//
    0b10011// 
    a&b// в результате получим 0b10010
    как так вышло:
    /*
    a = 00000000 00000000 00000000 00010010 
    b = 00000000 00000000 00000000 00010011 
    c = 00000000 00000000 00000000 00010010
    */ 
    Рассмотрим оператор "^" (Исключающее ИЛИ):
    исключающее ИЛИ выдает истину, если только один из битов истинен
    пример:
    PHP код:
    new a,b,с;
    0b11000// число 8 в десятичной
    0b10011// 
    a^b// в результате получим 0b1011
    как так вышло:
    /*
    a = 00000000 00000000 00000000 00011000 
    b = 00000000 00000000 00000000 00010011 
    c = 00000000 00000000 00000000 00001011
    */ 
    Рассмотрим оператор "<<" (сдвиг влево):
    Это просто) движение битов влево. (важно: при движении влево биты которые стояли слева сотрутся на количество сдвинутых бит)
    пример:
    PHP код:
    new a,b;
    0b1000// число 8 в десятичной
    a<<2// сдвинули на 2 бита влево
    как так вышло:
    /*
    a = 00000000 00000000 00000000 00001000 
    b = 00000000 00000000 00000000 00100000 
    */ 
    Рассмотрим оператор ">>" (сдвиг вправо):
    PHP код:
    new a,b;
    0b1000// число 8 в десятичной
    a>>2// сдвинули на 2 бита влево
    как так вышло:
    /*
    a = 00000000 00000000 00000000 00001000 
    b = 00000000 00000000 00000000 00000010 
    */ 
    Рассмотрим оператор "~" (отрицание:

    PHP код:
    new a// по умолчанию она в битах выглядит так 00000000 00000000 00000000 00000000
    new = ~a// сделав отрицание все биты станут противоположны то есть так: 11111111 11111111 11111111 11111111 
    Как всё это можно использовать:
    допустим в 1 ячейке хранить лицензии игрока

    допустим
    PHP код:
    new licenze;
    licenze 0b001010 // допустим смотря справа налево лицензии А(нету) B(есть) C(нету) D(есть) E(нету) F(нету) 
    для проверки:
    PHP код:
    if(licenze 1SendClientMessage(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: Писал от руки не проверяя:) Тема будет дополнятся и исправляться
    Последний раз редактировалось Pop; 07.11.2013 в 01:02.

  2. #2
    Аватар для Unreal
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.09.2014
    Сообщений
    133
    Репутация:
    4 ±
    а что будет если (?)
    PHP код:
    if(licenze & (0<<5)) 
    Pro-pawn.ru

  3. #3
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Тоже самое, что и:
    PHP код:
    if(licenze 0
    то есть ничего полезного.

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •