C#

Почему операции инкремента и декремента - унарные?

Возьмем x за переменную.
x++ =x+1
То есть у нас же есть всего два операнда, разве нет? Единица не считается операндом? В документации операции являются унарными, а почему, не ясно.
P. S. Вопрос конечно бесполезный, ведь это лишь теория, но мне чертвоски интересно, почему оперции унарные, а не бинарные.
Унарная операция - такая, которая применяется к одному операнду. Что конкретно тебя смущает?
Артур Каримов
Артур Каримов
59 568
Лучший ответ
Николай Сорокин если исходить из моего представления, то то что х++ = х+1. То есть почему 1 не может быть операндом?
Инкремент: n = n + 1
Декремент: n = n - 1

Инкремент: n += 1
Декремент: n -= 1

Независимо от того как выглядит запись, конечный результат тот же. В унарном варианте имеется возможность реализации префиксной и постфиксной формы, которые отличаются приоритетом.
есть всего два операнда, разве нет?
В контексте операций инкремента, его фиксированное значение операндом не является.
Алексей Глебов
Алексей Глебов
79 793
>x++ =x+1
А с чего ты решил, что данное утверждение справедливо и там вообще всегда появляется единица?

В плюсах operator++ перекрывается таким образом, каким это требуется программисту, например, инкремент указателя в числовом значении увеличит его значение не на единицу, а на размер того типа, на который этот указатель указывает, например на 4 для типа int

Операции инкремента и декремента не подразумевают, что переменная является строго числовой и что к ней нужно прибавить единицу, они подразумевают что над переменной нужно выполнить унарную операцию, внезапно, инкремента или декремента соответственно; а то как эти операции реализованы - это внутреннее дело самой реализации.
Вадим ...
А с чего ты решил, что данное утверждение справедливо и там вообще всегда появляется единица?
В плюсах operator++ перекрывается таким образом, каким это требуется программисту, например, инкремент указателя в числовом значении увеличит его значение не на единицу, а на размер того типа, на который этот указатель указывает, например на 4 для типа int

Все-таки, ++ всегда увеличивает на 1. То, что увеличение указателя на 1, в свою очередь, на самом деле приводит к увеличению на размер типа, это следующий разговор. Так что для указателей тоже справедливо ++ptr == ptr+1
Возможно смысл в том, что для бинарных операций нужно больше обращений к регистрам, а единица нигде не хранится, на которую производится инкремент или декремент.
К К
К К
23 232
Николай Сорокин Кстати, да, возможно поэтому)
Операция инкремента - унарная. Операция "прибавить" (что-либо к чему либо) - бинарная. В частных случаях, как например, в твоем, они могут быть по смыслу одинаковыми. Но все равно, по определению, "++" - унарная операция, а "+" - бинарная. Просто по количеству операндов.
Классический унарный минус точно так можно переписать в виде бинарной операции - как умножение на (-1). Это ничего не меняет, унарный минус продолжает оставаться унарной операцией, пусть ее и можно переписать в виде бинарной.
Иван Свиридов
Иван Свиридов
8 759
x++ операнд всего один. Унарный - одиночный