目前正在使用这个教程学习C++。它解释了! NOT
操作符是什么,但我不确定为什么会想要使用它。能否有人解释一下?
!
运算符在您想要检查某个条件当前未被满足时非常有用。
想象一个告诉您特定子系统是否已初始化的函数和另一个用于初始化它的函数:
bool subsystem_is_initialized();
void subsystem_initialize();
您可以检查它是否已初始化,并使用not运算符进行初始化(如果尚未初始化)。
if (!subsystem_is_initialized())
subsystem_initialize();
就实际目的而言,它是一种将值与零进行比较的更短的方式,并明确建议受影响的值是布尔值。您不一定需要它,但是同样,您也不需要乘法(可以使用加法循环),加法(可以使用二进制逻辑进行运算)或大多数二进制逻辑(我听说可以使用NANDs做任何事情,但我自己没有研究过)。
还要记住,像几乎所有其他 C++ 运算符一样,它可以被类重载。
!!
,它首先将值转换为 true
或 false
,然后再取反。但在 C++ 中这种方式不太常见,因为 return foo
会自动转换为适当的返回类型。 - tadmanif (!test_something())
do_something();
if (test_something()) {
} else
do_something();
但这样会使阅读变得更加困难。因此,虽然C++语言通常可以用其他结构来表达逻辑否定,但为了表明您的意图,显式地表达否定有助于提高可读性。
if
子句很凌乱,应该避免使用。看起来你本来想在那里放置一些内容,但却忘记了。 - tadman!
。 - bitmask当您需要在条件中翻转真/假以增加可读性时,可以使用它。 例如: 比较
// Ensure that the thing is NOT red.
if (thing_is_red() == false)
...
if (!thing_is_red())
...
NULL
相比要好得多,例如if (pointer != NULL)
与if (pointer)
或if (pointer == NULL)
作为if (!pointer)
。 - tadman!
来翻转条件。我发现用 NULL 或其他数据值替换明确的比较需要太多对你所使用的语言的特定问题的了解。真/假存在于计算机之外,在传统逻辑中,这是所有程序员都需要掌握的东西,不管所使用的编程语言如何。 - E.T.!
操作符用于bool条件检查中的否定目的。你可以在许多地方使用它。简单的例子:
if (!existInArray(A, i))
检查数组中是否不存在i
。
!
或 NOT 运算符是逻辑上的 NOT 门。
因此,NOT 门真值表表示如果 x
是 true,那么 !x
就是 false,反之亦然。
如果你从逻辑角度考虑,这并不太困难。例如,男性的 NOT 是女性,true 的 NOT 是 false,简单的 NOT 是复杂的。
&& 和
|| 是二元运算符,它们的语法如下: result = operand1 && operand2
result = operand1 || operand2
Unary is:
result = !operand1
operand1 = True
,则结果为 False;如果 operand1 = False
,则结果为 True。在 C/C++ 中,例如,NOT (1) 的计算结果为 0,而 NOT (0) 的计算结果为 1。NOT(任何非零数)的计算结果为 0。在 C 和 C++ 中,NOT 写作 !。NOT 在 AND 和 OR 之前计算。
0
表示 False,非 0
表示 True。!( 1 || 0 )
1 || 0
是 1
,表示为真,而应用 NOT 运算符后变成 0
,表示为假: !( 1 || 0 )
=> ! (1)
=> 0 that is false
||
和非 !
运算符。 !( 1 || 0 )
^ ^
NOT OR
std::istream
:int i;
std::cin >> i;
if ( ! std::cin ) {
// Something went wrong...
}
除此之外,各种类都有isValid()
或isDone()
函数;例如,使用GoF迭代器进行迭代:
for ( IteratorType i( init ); ! i.isDone(); i.next() ) {
// Do something with i.element()
}
地图类通常有一个contains
函数,因此您可能会问
if ( ! myMap.contains( key ) )
有时,您还需要使用布尔变量:例如,在需要进行一些复杂的评估的匹配条件的线性搜索中:
bool found = false;
int current = 0;
while ( ! found && current != end ) {
// maybe set found...
}
好的,如果你想将两个数字的和除以第三个数字,那么只有当第三个数字不为零时才能这样做。
#include <iostream>
using namespace std;
int main()
{
int a,b,c,sum;
cin >> a >> b >> c;
sum = a+b;
if (c!=0) //which is equivalent to if(!c)
cout << sum/c;
}
我使用了一个简单的例子,以便快速理解。现在一切都好了吗?祝你学习顺利。
!=
当然不同于!
,使用!
作为与零比较的速记方式并不理想。 - Pubby!
操作符的作用是将一个表达式从false
转换为true
。它通常用作== false
或== 0
的替代品。它经常使表达式更易于阅读:p->next
上进行非法访问,应该是 p != NULL
。 - zneak话虽如此,我认识的几乎每个程序员都曾被strcmp
咬伤过。我曾在一家商店工作,那里有一些#define
,例如#define STRCMP_EQUAL 0
等,并要求将检查写成if ( STRCMP_EQUAL == strcmp(str1, str2) )
,在我看来,这比if ( ! strcmp(str1, str2) )
明显得多。
if(!x)
,你将如何表达这个意思,我很感兴趣。 - PlasmaHH