如何在C ++中获得bool变量的相反值

时间:2011-11-10 20:57:13

标签: c++ variables boolean

对我来说,bool变量表示 true false

定义了一些bool变量并将其初始化为我们未知的值。我只想得到相反的价值。我应该如何在C ++中完成它?

7 个答案:

答案 0 :(得分:27)

只需使用!运算符:

bool x = // something

bool y = !x;  //  Get the opposite.

答案 1 :(得分:15)

bool b = false;

正确的解决方案:

b = !b;

您不应使用的有趣解决方案:

b = b?false:true;
b ^= 1;
b = (b+1)%2;
b = 1>>b;
b = 1-b;
b = b-1;
b = -1*(b-1);
b = b+'0'+'1'-'b';

作为练习,试着找出上述解决方案的工作原理。

答案 2 :(得分:11)

逻辑Not

的运算符

您可以选择是否要撰写 ! ,或 not ,或某些混合物。

但是,从版本10.0开始,Visual C ++没有内置的保留字not

因此,对于Visual C ++,如果要使用not,则必须包含[ iso646.h ]标头,该标头是标准C库的标头,保证为也可以在C ++中使用。但是,对于符合标准的C ++编译器,包括该头部没有任何影响(如C ++ 11标准的脚注176所述)。所以你无论如何都可以包括它:

#include <iostream>
#include <iso646.h>  // Visual C++ is not quite standard and requires this.

int main()
{
    using namespace std;

    // Display false and true as "false" and "true":
    cout << boolalpha;

    cout << "!false = " << !false << endl;
    cout << "not false = " << not false << endl;
}

关于COMPARING布尔值:

有些新手写的东西比如

    v != true

这不仅仅是冗长而且是一种彻头彻尾的危险习惯。它很危险的原因是许多API定义了布尔类型,其中可能的值不仅限于0和1(一个主要的例子是Window的BOOL类型)。然后,一个值可以表示逻辑真,而不是在数字上等于真。

因此,为了最大限度地提高安全性,请习惯使用!not,而永远不会直接与文字布尔值进行比较。

通常需要比较布尔值的示例是您需要逻辑Xor(独占或者,或者)的地方。 C ++缺少bool级别的运算符。但是你可以写a != b来实现与假设的bool级Xor运算符相同的。{/ p>


逻辑Xor作为受控反转

在某些情况下,如果某些条件为真,则需要反转(逻辑Not的应用),例如......

    if( condition )
    {
        x = !x;
    }

这可以写成......

    x = ((condition) != x);

它看起来像完全混淆,但它有两个功能,在某些情况下可以很方便:

  • 它可以用作数组a的一种“屏蔽”反转,其他一些数组的值用于控制a的每个元素是否被反转,和

  • 它是一个纯表达式计算,不涉及执行路径的选择,因此可以想象它可以用作优化(但是,我认为现代编译器可能会为你做这个机器代码级别,如果适合的话)。

干杯&amp;第h。,

答案 3 :(得分:10)

你想要NOT运算符,它是C,C ++和许多其他相关语言中的!

bool t = true;
bool f = !t;    // f = false

答案 4 :(得分:6)

给定bool value;已正确设置:

你应该用它:

  !value

其中!不合逻辑。

此外,还有其他一些方法可以达到同样的效果,这些方法都是有效的混淆:

  1. std::not_equal_to<bool>()(true,value);(需要#include <functional>
  2. std::count(&value, &value+1, false);(需要#include <algorithm>
  3. std::count_if(&value,&value+1,std::not1(std::bind2nd(std::greater_equal<bool>(), true)));

答案 5 :(得分:4)

你需要使用not运算符,它会给你相反的

    !

这应该可以满足您的需求。

答案 6 :(得分:0)

bool opposite = (someboolvar) ? 0 : 1 ;