Cautious 自知 2023-04-26 17:29 采纳率: 100%
浏览 26
已结题

布尔类型的相关提问,如何解决?

在c++,布尔类型bool,只要输入数值是非零的值,输出结果不应该是1吗?那为什么输入0.1的时候,输出的结果为0?
#include
using namespace std;

int main() {

bool flag;
cin >> flag;
cout << "flag的值:"<<flag << endl;

system("pause");
return 0;

}
vs2019的结果显示

img

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-26 20:22
    关注
    • 你可以看下这个问题的回答https://ask.csdn.net/questions/7547741
    • 除此之外, 这篇博客: C++学习笔记-C++对C语言的扩充和增强中的 增加了bool类型 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • C++在C语言的基本类型系统之上增加了bool
      C++中的bool可取的值只有true和false
      理论上bool只占用一个字节
      如果多个bool变量定义在一起,可能会各占一个bit,这取决于编译器的实现
      true代表真值,编译器内部用1来表示
      false代表非真值,编译器内部用0来表示
      bool类型只有true(非0)和false(0)两个值
      C++编译器会在赋值时将非0值转换为true,0值转换为false

      int main(int argc, char *argv[])
      {
      	int a;
      	bool b = true;
      
      	printf("b = %d, sizeof(b) = %d\n", b, sizeof(b));
      
      	b = 4;
      	a = b;
      	printf("a = %d, b = %d\n", a, b);
      
      	b = -4;
      	a = b;
      	printf("a = %d, b = %d\n", a, b);
      
      	a = 10;
      	b = a;
      	printf("a = %d, b = %d\n", a, b);
      
      	b = 0;
      	printf("b = %d\n", b);
      
      	system("pause");
      	return 0;
      }
      
    • 以下回答由chatgpt基于相关博客总结生成:

      这个问题是由于C++中的bool类型只有true和false两个取值,非零值会被转化为true,而0会被转化为false。在输入非零数值时,输出结果为1,因为1被转化为true。而输入0.1时,输出结果为0,可能是由于精度问题,在计算机内部实际上被转化为0。如果想要强制把小数转化为bool类型,可以使用static_cast进行类型转换,如下所示:

      #include <iostream>
      using namespace std;
      
      int main() {
          double x = 0.1;
          bool y = static_cast<bool>(x);
          cout << y << endl; // 输出0
          return 0;
      }
      

      如果想要转化非零的数为true,可以使用bool函数,如下所示:

      #include <iostream>
      using namespace std;
      
      int main() {
          int x = 42;
          bool y = bool(x);
          cout << y << endl; // 输出1
          return 0;
      }
      

      其中bool(x)可以将x转化为bool类型,非零值会被转化为true。如果不能解决该问题,可以说明精度问题可能需要使用double类型等高精度计算。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月16日
  • 已采纳回答 9月8日
  • 创建了问题 4月26日