C++ 中的布尔流输出表示

Boolean stream output representation in C++

我有 C++ 代码

int main()
{
   int a = 5, b=5;
   bool c;
   c = a == b;
   cout << c << endl;
   return 0;
}

Output is 1

谁能解释一下为什么输出是 1,为什么它不是真的?

在 C 中,比较运算符 (==) 总是 returns 整数值。 即如果条件正确它 returns 1 否则它 returns 0; 因此答案是 1.

这是默认的 stream 行为,但您可以使用 std::boolalpha 请求文本表示,如下所示:

#include <iomanip>

...

cout << std::boolalpha << c << endl;

docs and examples here

false 时默认显示 0true 时默认显示 1 的原因很大程度上是历史原因——很长一段时间 C 没有专门的 bool 类型,因此布尔运算(如比较)的结果被编码为整数。

因为这就是 std::ostream::operator<< 默认设置 bool 值的方式。它为 true 输出一个 1,为 false 输出一个 0。如果要打印文本 "true""false",可以使用 boolalpha io 操纵器:

std::cout << std::boolalpha << c;

此行为取决于输出流的标志。 std::ostream::operator<<(bool) function invokes ::std::ostream::num_put() whose behavior is dependent on the boolalpha 标志;如果未设置,函数首先执行整数转换,然后显示值。

您可以像这样更改行为:

int main() {
  int a = 5, b=5;
  bool c;
  c = a == b;
  std::cout << std::boolalpha << c << std::endl;
  return 0;
}

请注意上面 << std::boolalpha 的关键添加。另见:boolalpha.

好的,我很乐意解释!

首先,让我们看看您的代码:

您的代码

int main()
{
   int a = 5, b=5;
   bool c;
   c = a == b;
   cout << c << endl;
   return 0;
}

你的第一行声明:int a = 5, b = 5; <-- 这设置了一个变量

你的第二行声明:bool c; <-- 基本上将其设置为布尔变量的占位符

你的第三行声明:bool = 5 == 5; 这基本上是说 c 占位符现在等于 true

然后当您在此处打印 c 时:cout << c << endl; 您基本上是在说,打印布尔占位符的整数值或打印等于 true 等于 1 的 c。这有意义吗?

温馨提示:在编程中0=false,1=true。因此,二进制 1 和 0 的真正含义是真或假,也就是开或关。

两者都

#include <iomanip>

std::cout << std::boolalpha << c << std::endl;

std::cout << (c ? "true" : "false") << std::endl;