DLC Теорія до дисплея (bit, byte, binary shift and other) (UA)

Factorio425 views7 favorites4 min readUkrainianby ※RED※SKULL※Updated Feb 17View on Steam ↗

Подяка ( ̄y▽, ̄)╭

Тоді подякуй єдиним правильним методом. Задонать фонду чи зборам яким довіріяєш, це буде найкраща подяка для підтримки посібників.

Я мав можливість його написати, тому що хтось обрав шлях захищати українську ціною власного життя.

Розділення понять

Байт та біт (eng. byte ) (eng. bit )

Біт (eng. bit ) - (8, 16, 24, 32....) мінімальна кількість інформація, яка представляється у двійковій системі числення. 1 чи 0, що собою символізують стан (увімкнено/вимкнено).

Ваш вимикач на кухні, це фізичний еквівалент 1 біту

Але гра також має приклад одного біта і це Вимикач для електричних мереж



Байт (eng. byte ) - простими словами, представляють собою контейнери котрі зберігають інформацію із 1\0

8 bit = 1 byte



А для демонстрації бітово зсуву (binary shift) буду використовувати схемку на 32 bits
Внизу її частина, умовно білі вказують на байт, а мідні на біт



Для підтвердження взяв випадковий сайт [convertlive.com]для конвертування




Двійкові та десяткові числа

Як 13 в 1101? ¯\_(ツ)_/¯

Для переведення звичних 13 у двійкові використовується операція ділення з остачею.

Таким чином, бінарне представлення числа 13 буде 1101

Як звучить "правило для переведення десяткового числа в двійкове"

При переведенні десяткового числа в двійкове використовується метод поділу на 2. Якщо число ділиться націло на 2, записується 0 (відсутня остача від ділення), а якщо число не ділиться націло на 2, записується 1 (оскільки ми отримуємо остачу від ділення). Це правило застосовується на кожному кроці поділу десяткового числа на 2 до тих пір, поки результат ділення не стане 0. Після цього остачі записуються у зворотньому порядку, щоб отримати бінарне представлення числа.

Перевірка за допомогою онлайн калькулятора



Приклад у грі за допомогою ігрової логіки



Приклад остачі уже на числі 32

Далі буде використовуватись онлайн калькулятор, а це розділ слугує для розуміння магії яку він творить

Найстарший біт

Знаковий біт. Самий лівий біт в числі та вказує на знак для десяткового числа

Для 4 bit 1010 найстаршим буде 1010, а для 8 bit 1011 1011 відповідно 1011 1011

Приклад, якщо візьму 1 зроблю бітовий зсув на 31, то в результаті отримаємо максимально від'ємне значення для 32 bit програм -2147483648

На фото не горить жодна із лампочок по причині, що значення від'ємне





Проте, якщо буде зміщення на 30 bit, то значення буде 1073741824





Найстарший біт. І він в буде відповідати за знак в 32 bit



Далі зручно буде користуватись калькулятором[www.binaryconvert.com]

32 bit та "гайд, як довести гру фризів"

Factorio написана на розрядності 32 bit.

Тому представлення максимального і мінімального значення для такої розрядності буде таким

MIN -2 147 483 648 MAX 2 147 483 647




Особливість:

Якщо до максимально значення додати один то в результаті отримаємо мінімальне

2 147 483 647

+1

-2 147 483 648




Майже по схожому із мінімальним значення
-2 147 483 648

-1

2 147 483 647

Причина тому, переповнення

Це виникає, коли результат арифметичної операції виходить за межі можливого діапазону для певного формату числа. Наприклад, у двійковому представленні 32-бітних чисел, якщо до максимального значення додати одиницю, виникає переповнення, і отримується мінімальне значення.

Приклад переповнення в житті, це "тахометр"
Коли при досягнення максимуму починається новий цикл

Така кількість предметів 2 147 483 647 може покласти ваш світ чи навіть гру, можливий навіть синій екран

Бітовий зсув

Бітовий зсув - це переміщення бітів у двійковому числі вліво або вправо. Коли біт виходить за межі числа, він втрачається, а нові біти заповнюють порожні місця.

Виконуючи бітовий зсув, ми в результаті змінюємо десяткове значення на виході.

Максимальне значення, обмежене тільки розрядністью програми чи гри

Використаю візуальну демонстрацію.
Візьмемо 13, що звичайно виглядає так

Змістимо вліво на 5

Перемістивши на 5 вже маємо не 13, а 416
Хоча 1101 підходить і для 13 та 416 просто знаходять в іншому місці byte

Ось відео для більш наглядного розуміння

https://youtu.be/fHAFPdr4fiU?si=QlpoHuUFe-8Y9aj0

Схема

В постійному комбінаторі задаються дані/значення, далі вони потрапляють в комбінатор який керує бітовим зсувом: на значення 1,2,3..... та напрям вправо (>>) чи вліво (<<)

Далі сигнал йде до Арифметичних комбінатор, що у нашому випадку разом відіграють роль 1 byte чи 8 bit

З них вже сигнал йде в комбінатор який ділить на остаток (%) *число* % 2

Як працюють сегменти/сигнали дисплея

Візьму дисплей із гайду

https://steamcommunity.com/sharedfiles/filedetails/?id=3159067876



Буду показувати на такій схемці. Де 1 - це десятковий вигляд, а 2 бітовий



Беру в комбінатор та задаю наш символ А та зміщую на 1

І ми отримали значення зі знаком плюс.

Нагадаю умовою загоряння у лампочок дисплея така "символ" < 0



Проте, якщо змістити на 2 то значення буде мінус тому, що на двійці сегмент А повинен горіти



По грубому: Десяткове значення "символа" це бітовий код. Який містить інформацію, коли сигнал позитивний, а коли негативний. Тобто завдяки йому лампочка знає коли їй потрібно працювати, а коли ні

Джерела, якими користувався

Blueprint

Тут схемка на 32 bit та декілька готових варіантів дисплеїв
https://factoriobin.com/post/8iUNMTDm

This guide was created by its original author on the Steam Community. Are you the author and want it removed? Request removal.