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;
当 false
时默认显示 0
和 true
时默认显示 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;
我有 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;
当 false
时默认显示 0
和 true
时默认显示 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;