Ter*_* Li 5 c++ variables boolean
对我来说,bool变量表示true或false.
定义了一些bool变量并将其初始化为我们未知的值.我只想得到相反的价值.我应该如何在C++中完成它?
Mys*_*ial 27
只需使用!运营商:
bool x = // something
bool y = !x; // Get the opposite.
Run Code Online (Sandbox Code Playgroud)
Cam*_*Cam 15
bool b = false;
Run Code Online (Sandbox Code Playgroud)
正确的解决方案:
b = !b;
Run Code Online (Sandbox Code Playgroud)
您不应该使用的有趣解决方案:
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';
Run Code Online (Sandbox Code Playgroud)
作为练习,尝试找出上述解决方案的工作原理.
Che*_*Alf 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;
}
Run Code Online (Sandbox Code Playgroud)
有些新手写的东西就像
v != true
Run Code Online (Sandbox Code Playgroud)
这不仅仅是冗长而且是一种彻头彻尾的危险习惯.它很危险的原因是许多API定义了布尔类型,其中可能的值不仅限于0和1(一个主要的例子是Window的BOOL类型).然后,值可以表示逻辑True,而不是在数值上等于True.
所以,最大的安全性,使它成为一个习惯使用!或者not,只是从来没有直接比较,以文字布尔值.
通常需要比较布尔值的示例是您需要逻辑Xor(独占或者,或者).C++缺乏该bool级别的运算符.但是你可以编写a != b以实现与boolXor运算符所具有的假设级别相同的功能.
在某些情况下,如果某些条件为真,则需要反转(逻辑Not的应用),例如......
if( condition )
{
x = !x;
}
Run Code Online (Sandbox Code Playgroud)
这可以写成......
x = ((condition) != x);
Run Code Online (Sandbox Code Playgroud)
它看起来像完全混淆,但它有两个功能,在某些情况下可以很方便:
它可以用作一组a值的"屏蔽"反转,其他一些数组的值用于控制每个元素是否a被反转,以及
它是一个纯粹的表达式计算,不涉及执行路径的选择,因此可以想象它可以用作优化(但是,我认为现代编译器可能会在机器代码级别为您执行此操作,如果它是适当的).
干杯&hth.,
Pau*_*l R 10
您需要NOT运算符,它!使用C,C++和许多其他相关语言.
bool t = true;
bool f = !t; // f = false
Run Code Online (Sandbox Code Playgroud)
如果bool value;设置得当:
你应该使用这个:
!value
Run Code Online (Sandbox Code Playgroud)
哪里!逻辑不在这里.
此外,还有许多其他方法可以达到相同的效果,这些方法都是有效的混淆:
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)));