Я написал эту программу:
#include <iostream>
using namespace std;
void unequalityOperator(){
cout << "Running unequalityOperator..." << endl;
bool a = true, b = false;
if ( a != b ) cout << "!=" << endl;
if ( a =! b ) cout << "=!" << endl;
}
int main()
{
unequalityOperator();
system("pause");
return 0;
}
И я был удивлен, что он бежал и печатал обе струны. Поэтому я пробовал то же самое с некоторыми другими двоичными операторами, такими как <=
, >=
и т.д., Но это не сработало. Поэтому я хотел бы понять, есть ли разница между !=
И =!
,
Я знаю, что существуют некоторые операторы, такие как +=
, -=
и т.д., Которые работают по-другому и, например, разница между +=
и =+
заключается в том, что добавление произойдет до или после (соответственно) фактической команды. И по этой причине я подозреваю, что есть разница с иерархией в реализации этих операторов, но я не совсем уверен, что.
Поэтому, пожалуйста, помогите мне понять.
Выражение a = !b
является присвоением значения !b
переменной a
.
Оценка этого выражения в выражении if
является новым значением a
.
Поскольку b
задано значение false
и вы присваиваете значение !b
в a
, это значение true
.
В первом случае оператор !=
Является единственным оператором неравенства. Во втором случае это оператор присваивания =
с логическим не оператором !
, Итак, во втором случае вы присваиваете not b
a
и возвращаете его результат true
Это может помочь прояснить ситуацию:
!=
: неравномерный оператор=!
: это действительно два оператора: оператор присваивания и унарный логический оператор NOT+=
: оператор суммирования=+
: это действительно два оператора: оператор присваивания и оператор унарного +-=
: оператор разностного присваивания=-
: это действительно два оператора: оператор присваивания и унарный операторКроме того, поскольку они были в вашем вопросе, прежде чем быть отредактированы:
++=
: два оператора: оператор поэтапного приращения и оператор присваивания=++
: два оператора: оператор присваивания и оператор приращения префиксаНадеюсь, вы заметили шаблон.
Для справки:
(a =! b)
->(a = !b)
(a =! b)
присваивает!b
a
. Возможно, вы также захотите взглянуть на приоритет операторов различных операторов.