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

Boolean stream output representation in C++

本文关键字:输出 表示 布尔流 c++      更新时间:2023-10-16

我有c++代码

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

输出为1

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

因为std::ostream::operator<<默认是这样格式化bool值的。true输出1, false输出0。如果想打印文本"true""false",可以使用boolalpha io操纵符:

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

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

#include <iomanip>
...
cout << std::boolalpha << c << endl;

查看文档和示例。

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

此行为取决于输出流的标志。std::ostream::operator<<(bool)函数调用::std::ostream::num_put(),其行为依赖于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;时,你基本上是在说,打印布尔占位符的整数值,或者打印c等于true,等于1。明白了吗?

提示:编程时0 = false, 1 = true。因此二进制的1和0实际上表示真或假,也就是开或关。

或者

#include <iomanip>
std::cout << std::boolalpha << c << std::endl;

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

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