考虑到没有BOOL
数据类型之类的东西,请采取以下措施:
std::cout << (1>2); //<<-- prints 0
假设这个错误比较是 0,那么比较结果会减少到什么数据类型 deos?进行快速谷歌搜索不会产生任何结果。我最好的猜测是它是一个,unsigned char
因为它是最小的最基本数据类型,其中 0 真正表示为0x00
. 我不想假设任何事情,因为我不确定 voodoostd::cout
对值做了什么以使其成为可打印字符。
考虑到没有BOOL
数据类型之类的东西,请采取以下措施:
std::cout << (1>2); //<<-- prints 0
假设这个错误比较是 0,那么比较结果会减少到什么数据类型 deos?进行快速谷歌搜索不会产生任何结果。我最好的猜测是它是一个,unsigned char
因为它是最小的最基本数据类型,其中 0 真正表示为0x00
. 我不想假设任何事情,因为我不确定 voodoostd::cout
对值做了什么以使其成为可打印字符。
所有关系运算符 ( <
, >
, <=
, >=
) 的结果类型为bool
:
运算符
<
(小于)、>
(大于)、<=
(小于或等于)和>=
(大于或等于)都产生false
或true
。结果的类型是bool
。
类型的对象bool
具有值true
or 。false
在整体提升下, abool
可以转换为int
wherefalse
成为0
和true
成为1
:
类型的纯右值
bool
可以转换为类型的纯右值int
,false
变为零和true
变一。
bool
是一个整数类型,标准说它是通过使用“纯二进制计数系统”来表示的。描述此表示的脚注还不清楚它如何映射到值true
和false
,但您可以假设它们暗示 的值表示0
将是所有0
位:
整数的位置表示,它使用二进制数字 0 和 1,其中由连续位表示的值是相加的,从 1 开始,并乘以 2 的连续整数幂,可能最高位置的位除外。(改编自美国国家信息处理系统词典。)
没有标准BOOL
类型,而是bool
标准的基本类型:
[C++11: 3.9.1/6]:
typebool
的值为true
或false
。[..]
至于你的关系比较的结果:
[C++11: 5.9/1]:
关系运算符从左到右分组。[..]操作数应具有算术、枚举或指针类型,或 typestd::nullptr_t
。运算符<
(小于)、>
(大于)、<=
(小于或等于)和>=
(大于或等于)都产生false
或true
。结果的类型是bool
。
请注意,这在 C 中是不同的,其中没有内置类型bool
,并且关系比较的结果是类型int
:
[C99: 6.5/8]:
如果指定的关系为真且为假,则每个运算符<
(小于)、>
(大于)、<=
(小于或等于)和>=
(大于或等于)都应产生。结果有类型。1
0
int
C++ 标准,第 5.9 节关系运算符,第 1 段说:
结果的类型是
bool
。
这不是您问题的直接答案:
正如这里所说,它是 c++ 中的 bool 和 c 中的 int 但你我认为你会想到的部分是保存比较结果需要多少内存?
如您所知,数据类型定义了要分配的内存量。
注意:有时它(数据类型到内存大小定义)与编译器/处理器架构不同,例如在嵌入式系统环境中,人们过去常常使用位数来谈论和定义项目中的数据类型,例如typedef unsigned char uint8;
,而不是直接使用标准数据类型所以很容易移植到另一个编译器/目标处理器
你应该看看这个:为什么在 c++ 中 char 和 bool 的大小相同?
您还应该查看http://www.cplusplus.com/doc/tutorial/variables在“基本数据类型”部分下的每种数据类型及其大小和范围的表格,但他指出:
Size 和 Range 列的值取决于编译程序的系统。上面显示的值是大多数 32 位系统上的值。但是对于其他系统,一般规范是 int 具有系统架构(一个“单词”)建议的自然大小,并且四种整数类型 char、short、int 和 long 必须至少与前面的一样大它,char 总是一个字节的大小。这同样适用于浮点类型 float、double 和 long double,其中每一个都必须提供至少与前一个一样多的精度。