对我来说,bool变量表示 true 或 false 。
定义了一些bool变量并将其初始化为我们未知的值。我只想得到相反的价值。我应该如何在C ++中完成它?
答案 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
,或某些混合物。
但是,从版本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;
}
有些新手写的东西比如
v != true
这不仅仅是冗长而且是一种彻头彻尾的危险习惯。它很危险的原因是许多API定义了布尔类型,其中可能的值不仅限于0和1(一个主要的例子是Window的BOOL
类型)。然后,一个值可以表示逻辑真,而不是在数字上等于真。
因此,为了最大限度地提高安全性,请习惯使用!
或not
,而永远不会直接与文字布尔值进行比较。
通常需要比较布尔值的示例是您需要逻辑Xor(独占或者,或者)的地方。 C ++缺少bool
级别的运算符。但是你可以写a != b
来实现与假设的bool
级Xor运算符相同的。{/ p>
在某些情况下,如果某些条件为真,则需要反转(逻辑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
其中!
不合逻辑。
此外,还有其他一些方法可以达到同样的效果,这些方法都是有效的混淆:
std::not_equal_to<bool>()(true,value);
(需要#include <functional>
)std::count(&value, &value+1, false);
(需要#include <algorithm>
)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 ;