需要对不相等的运算符进行澄清

Clarification needed with not-equal operator

本文关键字:运算符 不相等      更新时间:2023-10-16

我写了这个程序:

#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 是变量 a 中值!b赋值。

if语句中此表达式的求值是 a 的新值。

由于b设置为 false并且您要将!b分配给 a ,因此此值为 true

在第一种情况下,!=运算符是单个不等式运算符。在第二种情况下,它是具有逻辑而不是运算符!的赋值运算符=。因此,在第二种情况下,您将not b分配给a并返回其结果true

这可能有助于澄清问题:

  • !=:不相等运算符
  • =!:这实际上是两个运算符:赋值运算符和一元逻辑 NOT 运算符
  • +=:求和赋值运算符
  • =+:这实际上是两个运算符:赋值运算符和一元+运算符
  • -=:差分赋值运算符
  • =-:这实际上是两个运算符:赋值运算符和一元运算符

另外,由于这些在您的问题中被编辑掉:

  • ++=:两个运算符:后缀增量运算符和赋值运算符
  • =++:两个运算符:赋值运算符和前缀递增运算符

我希望你注意到这个模式。

供参考:

  • http://en.cppreference.com/w/cpp/language/operator_precedence
  • http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B