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;
}
输出为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.
- 表示"accepting anything for this template argument" C++概念的通配符
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何将ampl中的集合表示为c++中的向量
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用星号在条形图中输出负值,以表示三个值的范围
- 整数数组元素,前导 0 表示垃圾输出
- 在泰勒级数展开中动态表示负输出 --> C++
- 什么?XXX!yyyyy+zzz 在 !heap -flt s 输出中表示
- 数字的基本表示-输出顺序相反
- 以十六进制表示法(0xABCDEF)将字节缓冲区的字节输出到控制台输出流
- c++中的布尔流输出表示