Автор Тема: Как работают функции and, or, not  (Прочитано 1345 раз)

Оффлайн mfisto

  • Скриптер
  • Главный Модератор
  • Новичек
  • *****
  • Сообщений: 174
  • Репутация: +19/-0
  • Не пью, не курю, за компьютером сижу...
    • mfistof
    • Просмотр профиля
    • Empire of CJ
В данной теме расскажу принцип работы, данных функций.
Начну с функции or. В ассемблере и не только данная функция выкалывает 1-цы у числа, если представить его в двоичной форме. Скажем число 8 - это будет 1000. Возьмем и выколем у него число 4 (4 - это 100). В результате будет 1100. Это пишется вот так ->
8 or 4 = 12. Здесь правило такое, 1 на 1 дает 1, 1 на 0 дает тоже 1, но 0 на 0 дает 0.

Далее это функция and. Она работает по следующему принципу. И так возьмем число 12 (это 1100). И проведем операцию AND. Например с числом 8 (это 1000). Пишем 12 and 8 = 8. Правило такое 1 на 1 дает 1. 1 на 0 дает 0. Ну и 0 на 0 тоже 0. Отсюда и получается что у 12 и у 8 совпадают только 4-ые биты. Поэтому и будет число 8. Вот еще пример возьмем число 8 и число 4, будет 8 and 4 = 0, так как у них нет одинаковых битов. По правилу 1 на 1 - нет совпадений.

Ну с операцией not, просто переворачиваем биты, в данном случае, так как в игре используется 4 байта на любую переменную, то мы берем только 32 бита и их переворачиваем, т.е. not 4 = -5, да и вообще почему именно 32 бита, думаю всем известно, так как 32 разрядная система или по другому - x86. Кто не знает принцип знака, то рассказываю, есть знаковые и есть беззнаковые числа, если знаковое, то последний бит числа отвечает за его знак, у нас это 32 бита значит 32-ой. А пишется со знаком минус. Все числа имеющие 32 бит будут отрицательны. Вот и все.
I know everything and nothing...

Оффлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 510
  • Репутация: +14/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Как работают функции and, or, not
« Ответ #1 : Март 24, 2015, 04:32:49 pm »
Спасибо, только по-прежнему не понимаю, где это может пригодиться в скриптинге  :'(

Оффлайн mfisto

  • Скриптер
  • Главный Модератор
  • Новичек
  • *****
  • Сообщений: 174
  • Репутация: +19/-0
  • Не пью, не курю, за компьютером сижу...
    • mfistof
    • Просмотр профиля
    • Empire of CJ
Re: Как работают функции and, or, not
« Ответ #2 : Март 24, 2015, 04:39:28 pm »
Бывает нужно проверить какой либо бит у числа, либо установить его. Скажем многие параметры в структурах, хранятся именно в битах для экономии. В Сан-Андреасе есть спец опкод по проверке и установке бита, а здесь не стали далеко ходить и взяли непосредственные опкоды с работой с битами. Ну по-крайней мере в Вайс-сити.
I know everything and nothing...