00085. Работа с битами переменных
Last updated
Last updated
Работа с битами переменных|Если вы изучали "Программирование" или "Основы цифровой техники", то эту тему вам без труда понять. Если же нет - будем сейчас изучать.|wmysterio|wmysterio||||Начнём с того, что каждая переменная состоит из битов. Бит - значение, которое может принимать значение 0 или 1. Их совокупность формирует какую-то информацию ( например: целое число ). Остановимся сы как раз на целых числах. Каждая переменная этого типа может иметь 32 бита. Пример: число 62 - это тоже самое, что и комбинация битов 111110, но это число не стоит воспринимать как десятичное. Здесь 111110 записано в двоичной системе числения, которые, как известно, состоит из ряда двух чисел - 0 или 1. В зависимости от порядка их размещения мы получаем разные результаты. Например: если мы поменяем последние цифры местами ( 111101 ) то результат будет - 61.
Как же собственно перевести число в двоичную систему числения? Хороший вопрос. Всё довольно просто. Нужно десятичное ( обычное для нас ) число постоянно делить на число 2 нацело. После чего в остатке в нас всегда будет число 0 или 1. Результат делим опять на 2 и так до тех пор, пока делить уже будет невозможно. В результате мы берём все остатки ( должен получится список чисел 0 и 1 ). После этого запишем это число в обратном направлении. Тоесть если мы получили комбинацию 011011, то результатом будет комбинация - 110110. Чтобы было понятнее, посмотрите картинку:
Как видите число 75 делили на 2. В нас вышло число 37, так как делить нужно на цело ( без дробной части ). 37*2 даёт 74. В результате вычитания мы получаем число комбинации - 1. Если вы тестируете и результат вышел более чем 1, то вы допустили ошибку. Затем результат ( 37 ) мы снова делим на 2 и результатам будет 18, а остаток 1. Мы получаем вторую цифру комбинации и в результате комбинация будет иметь вид - 11. Так по-аналогии вычисляем комбинации. Когда в результате деления будет число 1, то известно, что его поделить нацело на 2 нельзя, поэтому он перемещается автоматически в комбинацию битов. Собственно мы её получили - 1101001. Теперь нам осталось поменять местами эту комбинацию в обратную сторону ( смотрите вторую строку и по цвету увидите как нужно перемещать ). Мы получим комбинацию - 1001011. Это наше число 75 в двоичной системе числения. Не верите? Сделаем эксперимент!
Запустите калькулятор на вашем ПК. Выберите пункт "Вид->Программист".
Выберите "8 байт" на панели и установите чекбокс на "BIN". Теперь для ввода цифр в нас доступно только цифры 0 и 1:
Введите нашу битовою комбинацию:
Изменим чекбокс с "Bin" на "Dec" и что мы видим?
Всё верно! Комбинация битов в результате вычисления на калькуляторе совпало с нашим числом - 75!
Теперь расскажу о порядке битов. Комбинация 1001011 состоит из 7 битов ( так, как там 7 чисел ). Каждый их них имеет свой порядковый номер, который начинается с нуля ( нулевой бит ). Максимальный же - 31-й бит. Можно сформировать таблицу битов:
Номер бита | Числовое значение |
---|---|
0 | 1 |
1 | 1 |
2 | 0 |
3 | 1 |
4 | 0 |
5 | 0 |
6 | 1 |
К-во битов: 7 | Комбинация: 1001011 |
Можно сделать вывод, что биты читаются справа налево. Естественно, для подобных случаев пользуйтесь калькулятором для переводов. Я здесь расписал для того, что бы вы поняли откуда всё берётся :)
Собственно, зачем всё это нужно? Очень даже нужно! Например: при редактировании игровой памяти, где во многих случаях нужно будет изменять значения, которые изменяются только по битам.
Рассмотрим опкоды:
Задать переменной бит в числовое значение 1.
Здесь: 0@ - нужная переменная 1 - номер бита ( см. таблицу выше )
Задать переменной бит в числовое значение 0 ( очищает бит от значения 1 ).
Здесь: 0@ - нужная переменная 1 - номер бита ( см. таблицу выше )
Так же можно проверить "Бит переменной равен 1?":
Здесь: 0@ - нужная переменная 1 - номер бита ( см. таблицу выше )
Обратите внимание, что проверять можно только на единицу. Для того, что бы проверить "Бит переменной равен 0?" нужно:
Пример "Переодевания" я взял со справки, так как сейчас нет времени делать:
Будет время, покажу вам как сделать вот такую вот ветку талантов, из моего скрипта Warlock:
|919|1|0|23691172`png`453`285`400`251``\|59363386`png`419`383`399`365``\|39305871`png`417`380`400`364``\|14749138`png`407`67`400`65``\|20373833`png`419`383`399`365``\|32440651`png`500`300`400`240``\||rabota_s_bitami_peremennykh|1499848405