Размещение оператора - (вычитание) перед положительной переменной возвращает отрицательное значение. Почему + перед отрицательным var не возвращает положительный результат?

Если у меня есть целое число с положительным значением, я могу вернуть отрицательное значение, поместив оператор - непосредственно перед ним. (например, -myInt). Но если у меня есть int с отрицательным значением, использование оператора + не возвращает положительное значение. Я хотел бы понять, почему это так.

Я использую C# и Unity, выводя данные на консоль Unity. Например:

myInt = 5;
Debug.Log(-myInt);

Дает ожидаемое значение -5. Но:

myInt = -5
Debug.Log(+myInt);

Дает значение -5.

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

Это похоже на глупый вопрос - заранее спасибо.

ps: (Кроме того, как правильно ссылаться на минус в '-myInt' - правильно ли я называю его оператором в данном случае?)

это всего лишь математика и семантика — на самом деле не имеющая ничего общего с программированием (хотя программирование соблюдает это соглашение); +5 — это 5, +(-5) — это -5, а не +5; унарное сложение не меняет знак на положительный - это операция невозможна

Marc Gravell 07.08.2024 12:19

Чтобы отрицать, используйте ---5 -> 5, чтобы получить абсолютное значение, используйте Math.Abs: ​​Math.Abs(-5) == 5

Dmitry Bychenko 07.08.2024 12:20

@ps: это унарный оператор минус. en.wikipedia.org/wiki/Unary_operation просто думайте о + и - как об умножении на +1 и -1. только умножение на -1 меняет знак

Piglet 07.08.2024 12:47
What's the correct way of referring to the minus in '-myInt' - am I correct in calling it an operator in this instance — да, хотя, если быть точнее, это унарный оператор отрицания.
Matthew Watson 07.08.2024 13:04

Я должен отметить, что использование префикса + не всегда является пустым, как показывает следующий код: short x = 0; short y = +x;. Это не скомпилируется, потому что +x преобразует short x в int. Если бы это было неактивно, то +x было бы типа short.

Matthew Watson 07.08.2024 13:11
-x изменит знак так, что четное количество отрицаний -(-(-(-x)))) вернется x с тем же знаком. В нашей математике нет противоположности операции отрицания, и +x — это просто форма явного указания положительного значения (в отличие от отрицательного значения, которое можно получить путем отрицания положительного значения). Но есть еще одна операция для получения абсолютного значения Math.Abs(x) (в математике |x|), которая позволяет переопределить знак x на положительный или отрицательный (с отрицанием -Math.Abs(x)).
Sinatr 07.08.2024 15:22
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
60
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Размещение оператора - (вычитание) перед положительной переменной возвращает отрицательное значение. Почему не + перед отрицательной переменной вернуть положительный результат?

В вашем примере

int myInt = -5; — это унарный оператор минус, а не оператор двоичного вычитания. Он отрицает свой операнд и, следовательно, меняет его знак.

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

Ответ принят как подходящий

В алгебре -x является сокращением от 0-x, и когда x положительно, результат отрицателен, и наоборот.

Точно так же +x является сокращением от 0+x, и когда x положительный, результат положительный, а когда x отрицательный, результат отрицательный.

В контексте программирования +x обозначает оператор op_UnaryPlus.

А -x обозначает оператор op_UnaryNegation.

Оператор символы и имена должен следовать соглашению о +x возврате x и -x возврате операции отрицания для всех типов, поддерживающих эту запись.

При перегрузке операторов важно соблюдать эти соглашения.

По ссылке выше приведена полная таблица с описанием операторов, символов и имен.

Символ оператора C# Имя метаданных Дружественное имя Н/Д op_Implicit Куда/Откуда Н/Д op_Explicit Куда/Откуда + (двоичный) op_Addition Добавлять - (двоичный) op_Subtraction Вычесть .. -- op_Decrement Декремент ++ op_Increment Приращение - (унарный) op_UnaryNegation Отрицать + (унарный) op_UnaryPlus Плюс

Другие вопросы по теме