Программирование > Общие вопросы Assembler

Как работают функции and, or, not

(1/1)

mfisto:
В данной теме расскажу принцип работы, данных функций.
Начну с функции 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 бит будут отрицательны. Вот и все.

Shagg_E:
Спасибо, только по-прежнему не понимаю, где это может пригодиться в скриптинге  :'(

mfisto:
Бывает нужно проверить какой либо бит у числа, либо установить его. Скажем многие параметры в структурах, хранятся именно в битах для экономии. В Сан-Андреасе есть спец опкод по проверке и установке бита, а здесь не стали далеко ходить и взяли непосредственные опкоды с работой с битами. Ну по-крайней мере в Вайс-сити.

Навигация

[0] Главная страница сообщений

Перейти к полной версии