Factorio
评价数不足
DLC Теорія до дисплея (bit, byte, binary shift and other) (UA)
由 ※RED※SKULL※ 制作
Необхідна інформація, якої не було в посібнику про створення дисплея.
Туди її не вносив і навіть не хотів, бо ця тема прям зовсім інша наука. Яка потребує не тільки бажання пограти в Factorio, а і розуміти, як працює процесор, математику та можливо навіть програмування

Інформація не на один вечір, рахуйте це лекцією для гри. Скажу, що сам навіть отримав шок від половини термінів, особливо від їх "макароності". Щоб розповісти про один потрібно ще два, а для їх розповіді окремий розділ

Я не маю відзнак, що можуть підтвердити мої знання / мою компетентність в цій темі. Тому, якщо знайшли не правильне трактування терміна чи невірну інформацію. То просто напишіть про це в коментаріях
   
奖励
收藏
已收藏
取消收藏
Розділення понять
Байт та біт (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://psteamcommunity.yuanyoumao.com/sharedfiles/filedetails/?id=3159067876






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






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

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

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







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





По грубому: Десяткове значення "символа" це бітовий код. Який містить інформацію, коли сигнал позитивний, а коли негативний. Тобто завдяки йому лампочка знає коли їй потрібно працювати, а коли ні
Blueprint
Тут схемка на 32 bit та декілька готових варіантів дисплеїв
https://factoriobin.com/post/8iUNMTDm
Подяка ( ̄y▽, ̄)╭
Подякувати[send.monobank.ua]