На других языках: Čeština Deutsch English Français 日本語 Polski Українська 简体中文

Arithmetic combinator/ru: Difference between revisions

From Official Factorio Wiki
Jump to navigation Jump to search
m (fixed links)
m (fixed fixed text)
 
(2 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Languages}}
{{Languages}}{{:Infobox:Arithmetic combinator}}
{{:Infobox:Arithmetic combinator}}
'''Арифметический комбинатор''' – часть [[circuit network/ru|логической сети]] и один из трех типов комбинаторов, доступных в игре (наряду с [[constant combinator/ru|постоянным комбинатором]] и [[decider combinator/ru|сравнивающим комбинатором]]). Каждый арифметический комбинатор может выполнять одну из следующих математических операций над сигналами, отображая символ операции сверху:
Арифметический комбинатор - часть [[circuit network/ru|логической сети]] и один из трех типов комбинаторов, доступных в игре (еще есть [[constant combinator/ru|постоянный комбинатор]] и [[decider combinator/ru|сравнивающий комбинатор]]). Каждый арифметический комбинатор может выполнять одну из следующих математических операций над сигналами, при этом комбинатор отображает символ, соответствующий математической операции:
 
[[File:arith_combinator_anim.png]]


* сложение (<span style="color:yellow">+</span>)
* сложение (<span style="color:yellow">+</span>)
Line 7: Line 8:
* умножение (<span style="color:yellow">*</span>)
* умножение (<span style="color:yellow">*</span>)
* деление (<span style="color:yellow">/</span>)
* деление (<span style="color:yellow">/</span>)
* остаток от деления (<span style="color:yellow">%</span>)
* остаток (<span style="color:yellow">%</span>)
* возведение в степень (<span style="color:yellow">^</span>)
* возведение в степень (<span style="color:yellow">^</span>)
* побитовый сдвиг влево (<span style="color:cyan"><<</span>)
* битовый сдвиг влево (<span style="color:cyan"><<</span>)
* побитовый сдвиг вправо (<span style="color:cyan">>></span>)
* битовый сдвиг вправо (<span style="color:cyan">>></span>)
* побитовое И (<span style="color:cyan">&</span>)
* битовое И (<span style="color:cyan">&</span>)
* побитовое ИЛИ (<span style="color:cyan">|</span>)
* битовое ИЛИ (<span style="color:cyan">|</span>)
* побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ (<span style="color:cyan">^</span>)
* исключающее ИЛИ (<span style="color:cyan">^</span>)


Арифметический комбинатор принимает два входящих соединения (красный и зеленый провода), и отправляет результат операции на оба выходных соединения. Входящие провода подключаются к узелкам на левой стороне спрайта на боковой панели, а провода для выходного подключения - на правой стороне.
Арифметический комбинатор принимает два входящих соединения (красный и зеленый провода) и отправляет результат операции на оба выходных соединения. Входящие провода подключаются к узелкам на левой стороне спрайта на боковой панели, а провода для выходного подключения на правой стороне.


== Функции ==
== Функции ==
Line 21: Line 22:


# Все входящие сигналы на красном и зеленом проводах складываются внутри комбинатора.
# Все входящие сигналы на красном и зеленом проводах складываются внутри комбинатора.
# Выбранная операция выполняется над выбранным сигналом.
# Определённая операция выполняется над выбранным сигналом.
# Результат этой операции выводится в качестве выбранного выходного сигнала.
# Результат этой операции выводится в качестве выбранного выходного сигнала.


Левый операнд действия может быть любым одиночным сигналом или [[Virtual signals#Each|виртуальным сигналом ''каждый'']], а правый операнд может быть любым одиночным сигналом или постоянным значением.
Левый операнд действия может быть любым одиночным сигналом или [[Circuit network/ru#Каждый|виртуальным сигналом ''каждый'']], а правый операнд может быть любым одиночным сигналом или постоянным значением.


Если левый операнд представляет собой одиночный сигнал, то на выходе должен быть также одиночный сигнал. Операция выполняется над значениями выбранных левого и правого сигналов, а результат отправляется на выход выбранного сигнала.
Если левый операнд это одиночный сигнал, то на выходе также должен быть одиночный сигнал. Операция выполняется над значениями выбранных левого и правого сигналов, а результат отправляется на выход выбранного сигнала.


Если левый операнд является сигналом ''каждый'', то выходом может быть одиночный сигнал или сигнал ''каждый''. Если на выход подается сигнал ''каждый'', то операция выполняется над значением каждого входного сигнала совместно со значением правого операнда, и каждый результат отправляется на выход того же сигнала. Если на выход подается одиночный сигнал, то операция выполняется над каждым из входных сигналов, а индивидуальные результаты суммируются, и результат отправляется на выход к выбранному сигналу.
Если левый операнд является сигналом ''каждый'', то выходом может быть одиночный сигнал или сигнал ''каждый''. Если на выход подаётся сигнал ''каждый'', то операция выполняется над значением каждого входного сигнала со значением правого операнда, и каждый результат отправляется на выход того же сигнала. Если на выход подается одиночный сигнал, то операция выполняется над каждым из входных сигналов, результаты операций суммируются, и результат отправляется на выход к выбранному сигналу.


== Примечания по операциям ==
== Примечания по операциям ==
При использовании '''деления''', результат усекается:
При использовании '''деления''', результатом является целое число:
* 21 / 10 = 2
* 21 / 10 = 2
* 19 / 10 = 1
* 19 / 10 = 1
* -21 / 10 = -2
* −21 / 10 = −2
* -19 / 10 = -1
* −19 / 10 = −1
* 21 / -10 = -2
* 21 / −10 = −2
* 19 / -10 = -1
* 19 / −10 = −1
* -21 / -10 = 2
* −21 / −10 = 2
* -19 / -10 = 1
* −19 / −10 = 1


'''Остаток от деления''', указываемый при помощи знака %, как и в большинстве языков программирования, является остатком от деления. Например, 13 % 3 = 1 (13 = 4 * 3 + 1). Это может быть применено, например, для выделения отдельных цифр числа при строительстве визуальных индикаторов, наряду с делением:
'''Остаток''', обозначающийся как %, как и в большинстве языков программирования, является вычислением остатка от деления. Например, 13 % 3 = 1 (ибо 13 = 4 * 3 + 1). Это можно, например, объединить с описанным выше целым делением для выделения отдельных цифр числа при строительстве визуальных индикаторов:
* (24321 / 10000) % 10  = 2
* (24321 / 10000) % 10  = 2
* (24321 / 1000) % 10  = 4
* (24321 / 1000) % 10  = 4
Line 48: Line 49:
* (24321 / 1) % 10  = 1
* (24321 / 1) % 10  = 1


Отрицание левого операнда также делает результат отрицательным, в то время как отрицание правого операнда ничего не делает.
Отрицательность левого операнда также делает результат отрицательным, в то время как отрицательность правого операнда ничего не делает.
* 13 % 3 = 1
* 13 % 3 = 1
* 13 % -3 = 1
* 13 % -3 = 1
Line 54: Line 55:
* -13 % -3 = -1
* -13 % -3 = -1


"'Побитовый сдвиг вправо" - это арифметический сдвиг (с добавочным знаком), не логический.
'''Битовый сдвиг влево''' и '''битовый сдвиг вправо''' – не арифметические операции. В действительности эти операции работают с числами в [https://ru.wikipedia.org/wiki/Двоичная_система_счисления двоичной] записи. Нули и единицы, из которых состоит число, сдвигаются в выбранном направлении, результатом чего может стать совершенно иное число, из-за изменений в двоичной записи числа.
 
== История изменений ==
{{history|0.15.0|
* В арифметический комбинатор добавлены остаток от деления, степень, побитовый сдвиг влево, побитовый сдвиг вправо, побитовое И, побитовое И, побитовое ИЛИ.}}
 
{{history|0.13.0|
* При наведении курсора на подключенный подключенный к [[circuit network/ru|логической сети]] комбинатор, его провода подсвечиваются.
* Комбинаторы показывают вход и выход при режиме, включаемом кнопкой ALT (ориг.: ALT-mode).
* Добавлено больше виртуальных сигналов для комбинаторов.
* Постоянный комбинатор теперь можно вращать.
* Опция "Входное количество" у сравнивающего комбинатора заставляет комбинатор копировать количество выбранного выходного сигнала со входных сигналов, вместо копирования количества из условия.
* Новая графика для комбинаторов. }}
 
{{history|0.12.5|
* Теперь комбинаторы излучают свет.}}
 
{{history|0.12.2|
* Комбинаторы больше не выключаются, когда не подключено проводов.}}


{{history|0.12.0|
[[File:Bitshiftleft.png|none|thumb|200px|Пример битового сдвига влево.]]
* Введены в игру}}


== См. также ==
== См. также ==
*[[Decider combinator/ru|Сравнивающий комбинатор]]
*{{L|Decider combinator}}
*[[Constant combinator/ru|Постоянный комбинатор]]
*{{L|Constant combinator}}
*[[Tutorial:Combinator tutorial/ru|Туториал по комбинаторам]]
*{{L|Tutorial:Combinator tutorial}}
*[[Circuit network/ru|Логическая сеть]]
*{{L|Circuit network}}
*[[Tutorial:Circuit-network_Cookbook/ru|Справочное руководство по логической сети]]
*{{L|Tutorial:Circuit network cookbook}}


{{LogisticsNav}}
{{LogisticsNav}}
{{C|Circuit network}}
{{C|Circuit network}}

Latest revision as of 17:15, 10 November 2020

Arithmetic combinator.png
Арифметический комбинатор

ArithmeticSprite.png

Затраты

Time.png
0.5
+
Copper cable.png
5
+
Electronic circuit.png
5
Arithmetic combinator.png
1

Всего сырья

Time.png
8
+
Copper plate.png
10
+
Iron plate.png
5

Цвет на карте

Здоровье

Quality normal.png 150
Quality uncommon.png 195 Quality rare.png 240
Quality epic.png 285 Quality legendary.png 375

Размер пачки

50

Вместимость ракеты

50 (1 stack)

Потребление

1 kw (электричество)

Время добычи

0.1

Тип объекта

arithmetic-combinator

Служебное имя

arithmetic-combinator

Необходимые технологии

Circuit network (research).png

Делается в

Assembling machine 1.png
Assembling machine 2.png
Assembling machine 3.png
Player.png

Арифметический комбинатор – часть логической сети и один из трех типов комбинаторов, доступных в игре (наряду с постоянным комбинатором и сравнивающим комбинатором). Каждый арифметический комбинатор может выполнять одну из следующих математических операций над сигналами, отображая символ операции сверху:

Arith combinator anim.png

  • сложение (+)
  • вычитание (-)
  • умножение (*)
  • деление (/)
  • остаток (%)
  • возведение в степень (^)
  • битовый сдвиг влево (<<)
  • битовый сдвиг вправо (>>)
  • битовое И (&)
  • битовое ИЛИ (|)
  • исключающее ИЛИ (^)

Арифметический комбинатор принимает два входящих соединения (красный и зеленый провода) и отправляет результат операции на оба выходных соединения. Входящие провода подключаются к узелкам на левой стороне спрайта на боковой панели, а провода для выходного подключения – на правой стороне.

Функции

Внутренняя логика процесса состоит из трех шагов:

  1. Все входящие сигналы на красном и зеленом проводах складываются внутри комбинатора.
  2. Определённая операция выполняется над выбранным сигналом.
  3. Результат этой операции выводится в качестве выбранного выходного сигнала.

Левый операнд действия может быть любым одиночным сигналом или виртуальным сигналом каждый, а правый операнд может быть любым одиночным сигналом или постоянным значением.

Если левый операнд это одиночный сигнал, то на выходе также должен быть одиночный сигнал. Операция выполняется над значениями выбранных левого и правого сигналов, а результат отправляется на выход выбранного сигнала.

Если левый операнд является сигналом каждый, то выходом может быть одиночный сигнал или сигнал каждый. Если на выход подаётся сигнал каждый, то операция выполняется над значением каждого входного сигнала со значением правого операнда, и каждый результат отправляется на выход того же сигнала. Если на выход подается одиночный сигнал, то операция выполняется над каждым из входных сигналов, результаты операций суммируются, и результат отправляется на выход к выбранному сигналу.

Примечания по операциям

При использовании деления, результатом является целое число:

  • 21 / 10 = 2
  • 19 / 10 = 1
  • −21 / 10 = −2
  • −19 / 10 = −1
  • 21 / −10 = −2
  • 19 / −10 = −1
  • −21 / −10 = 2
  • −19 / −10 = 1

Остаток, обозначающийся как %, как и в большинстве языков программирования, является вычислением остатка от деления. Например, 13 % 3 = 1 (ибо 13 = 4 * 3 + 1). Это можно, например, объединить с описанным выше целым делением для выделения отдельных цифр числа при строительстве визуальных индикаторов:

  • (24321 / 10000) % 10 = 2
  • (24321 / 1000) % 10 = 4
  • (24321 / 100) % 10 = 3
  • (24321 / 10) % 10 = 2
  • (24321 / 1) % 10 = 1

Отрицательность левого операнда также делает результат отрицательным, в то время как отрицательность правого операнда ничего не делает.

  • 13 % 3 = 1
  • 13 % -3 = 1
  • -13 % 3 = -1
  • -13 % -3 = -1

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

Пример битового сдвига влево.

См. также