比较C 中BOOL数据类型的比较
Comparison of bool data types in C++
bool
数据类型通常表示为0
(AS false
(和1
(AS true
(。但是,有人说true
值可以由1
以外的其他值表示。如果以后的语句为 true
,则以下表达式可能不正确。
bool x = 1;
if (x==1)
Do something..
我想知道以下陈述是否会根据需要和预期在常用编译器上工作。
 
bool x = 1; if (x==1) Do something.
 
bool y = 0; if (y>0.5) Do something..
 
bool z = 1; if(z>0.5) Do something...
§§4.5标准说:
类型布尔的rvalue可以是 转换为int类型的rvalue, 错误变为零和真实 成为一个。
关于2和3,类型转换进行,因此陈述将根据需要工作
根据布尔转换规则:
积分,浮点,未指挥,指针的序幕 指针到成员类型可以转换为类型的贵族
bool
。值零(用于积分,浮点和未刻录 枚举(和空指针和零指针到成员 值成为
false
。所有其他值成为true
。
然后
bool x = 1; // x will be true
bool y = 0; // y will be false
bool z = 1; // z will be true
对于第一种情况,if (x==1)
,x
将晋升为int
,
bool
类型可以转换为int
,而值false
成为0
,并且true
成为1
。
然后(x==1)
是true
。
对于第二种情况,if (y>0.5)
,y
将升级为具有值0
的int
,然后转换为double
进行比较;
如果操作数具有算术或枚举类型(范围或未指示(,则按照算术运算符的规则,对两个操作数进行了通常的算术转换。转换后比较值:
和
如果操作数传递给算术运算符是积分或无名的枚举类型,则在其他任何动作之前(但是在lvalue to-rvalue转换之后(如果适用(之后(,则操作数会进行积分促销。
...
- 否则,如果任何操作数是
double
,则将其他操作数转换为double
然后y>0.5
是false
。
对于第三种情况,if (z>0.5)
,z
将升级为具有值1
的int
,然后转换为double
进行比较;然后z>0.5
是true
。
if (x==1)
不正确。当您将布尔值转换为数字类型时,所有真实值表示。
给定的bool z=true
,if(z>0.5)
是正确的,因为1.0大于0.5。
bool
只有两个值,它们是 true
和 false
。1
和0
是整数文字,因此可以将其转换为bool
。您必须考虑转换在两个方向上都起作用,但您不一定会恢复相同的整数:
int a = 5;
bool b = a; // int -> bool conversion
int c = b; // bool -> int conversion
std::cout << a << " " c;
打印:
5 1
0
以外的任何整数值都将转换为true
,但是true
始终转换为1
。
牢记这一点,您的所有示例都将按预期工作。但是,请注意,bool
的主要目的是我们可以在代码中使用true
和false
,而不必将数字作为0
和1
特殊含义。要明确总是更好,因此,当您指的是true
时,最好写true
而不是1
。
这里的一个相关问题是"为什么我们甚至允许在bool
和int
?
答案是向后的兼容性和妥协,因为C和C 用于建议整数存储布尔值。因此,有很多代码
- 尽管有新的语言规则,也应继续工作关系运营商返回bool而不是int。
- 允许您通过更改布尔变量的声明来升级旧代码其余代码的其余部分进行最小的后续更改。
其他语言在这方面可能更干净,但是bool
的类型显然是成功的。
- 防止主数据类型C++的隐式转换
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在C++中打印指向不同基元数据类型的指针的内存地址
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何计算数据类型的范围,例如int
- C++中数据类型修饰符的顺序
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- C++,"由于数据类型范围有限,比较总是正确的"
- C++ - 比较模板和类之间的数据类型
- 可以比较不同数据类型 c++ 的模板函数
- 比较C 中BOOL数据类型的比较
- 不使用比较的数据类型的比较
- 如何为数据类型 vector<glm::vec3> (opengl 数据类型) 编写 std::minmax 函数的自定义比较器
- 比较C 中的两个数据类型
- 比较If语句中的数据类型
- 比较vtk数据类型和基本数据类型
- 将变量与 C++ 中的数据类型进行比较
- GCC:由于数据类型范围有限,比较始终为真 - 在模板参数中
- 由于数据类型的范围有限,比较总是错误的
- 二进制比较的结果简化为什么数据类型