Если у меня есть целое число с положительным значением, я могу вернуть отрицательное значение, поместив оператор - непосредственно перед ним. (например, -myInt). Но если у меня есть int с отрицательным значением, использование оператора + не возвращает положительное значение. Я хотел бы понять, почему это так.
Я использую C# и Unity, выводя данные на консоль Unity. Например:
myInt = 5;
Debug.Log(-myInt);
Дает ожидаемое значение -5. Но:
myInt = -5
Debug.Log(+myInt);
Дает значение -5.
Я вижу, что поменял местами значения и операторы между примерами, и поэтому я чувствую, что должен видеть то, что вижу; но второй пример не кажется интуитивным, и я его не понимаю. Я ожидал, что отрицательное значение станет положительным значением.
Это похоже на глупый вопрос - заранее спасибо.
ps: (Кроме того, как правильно ссылаться на минус в '-myInt' - правильно ли я называю его оператором в данном случае?)
Чтобы отрицать, используйте -
--5
-> 5
, чтобы получить абсолютное значение, используйте Math.Abs
: Math.Abs(-5) == 5
@ps: это унарный оператор минус. en.wikipedia.org/wiki/Unary_operation просто думайте о + и - как об умножении на +1 и -1. только умножение на -1 меняет знак
What's the correct way of referring to the minus in '-myInt' - am I correct in calling it an operator in this instance
— да, хотя, если быть точнее, это унарный оператор отрицания.
Я должен отметить, что использование префикса +
не всегда является пустым, как показывает следующий код: short x = 0; short y = +x;
. Это не скомпилируется, потому что +x
преобразует short x
в int
. Если бы это было неактивно, то +x
было бы типа short
.
-x
изменит знак так, что четное количество отрицаний -(-(-(-x))))
вернется x
с тем же знаком. В нашей математике нет противоположности операции отрицания, и +x
— это просто форма явного указания положительного значения (в отличие от отрицательного значения, которое можно получить путем отрицания положительного значения). Но есть еще одна операция для получения абсолютного значения Math.Abs(x)
(в математике |x|
), которая позволяет переопределить знак x
на положительный или отрицательный (с отрицанием -Math.Abs(x)
).
Размещение оператора - (вычитание) перед положительной переменной возвращает отрицательное значение. Почему не + перед отрицательной переменной вернуть положительный результат?
В вашем примере
int myInt = -5;
— это унарный оператор минус, а не оператор двоичного вычитания. Он отрицает свой операнд и, следовательно, меняет его знак.
Унарный оператор плюс не меняет знак. Поскольку он не влияет на операнд, его можно и обычно опускаются. По сути, он существует просто для полноты.
В алгебре -x
является сокращением от 0-x
, и когда x
положительно, результат отрицателен, и наоборот.
Точно так же +x
является сокращением от 0+x
, и когда x
положительный, результат положительный, а когда x
отрицательный, результат отрицательный.
В контексте программирования +x
обозначает оператор op_UnaryPlus.
А -x
обозначает оператор op_UnaryNegation.
Оператор символы и имена должен следовать соглашению о +x
возврате x
и -x
возврате операции отрицания для всех типов, поддерживающих эту запись.
При перегрузке операторов важно соблюдать эти соглашения.
По ссылке выше приведена полная таблица с описанием операторов, символов и имен.
op_UnaryNegation
Отрицать
+ (унарный)
op_UnaryPlus
Плюс
это всего лишь математика и семантика — на самом деле не имеющая ничего общего с программированием (хотя программирование соблюдает это соглашение); +5 — это 5, +(-5) — это -5, а не +5; унарное сложение не меняет знак на положительный - это операция невозможна