Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么是Bool和Bool而不是int8\t或char? 我在C和 Boo. C++中,对代码< >代码> < Boo> >代码> BOOL ( STDBOOL .H < /COD> >)进行了思考。_C++_C_Types_Boolean - Fatal编程技术网

为什么是Bool和Bool而不是int8\t或char? 我在C和 Boo. C++中,对代码< >代码> < Boo> >代码> BOOL ( STDBOOL .H < /COD> >)进行了思考。

为什么是Bool和Bool而不是int8\t或char? 我在C和 Boo. C++中,对代码< >代码> < Boo> >代码> BOOL ( STDBOOL .H < /COD> >)进行了思考。,c++,c,types,boolean,C++,C,Types,Boolean,我们使用布尔类型来声明对象,这些对象只应包含0或1的值。 例如: _Bool bin = 1; 或 (注意:bool是\u bool在stdbool.h的头文件中的宏) 在C中 或 < C++ > 但是\u Bool和Bool的布尔类型真的有效吗 我做了一个测试来确定内存中每个对象的大小: 对于C: #include <stdio.h> #include <stdbool.h> // for "bool" macro. int main() { _B

我们使用布尔类型来声明对象,这些对象只应包含0或1的值。 例如:

_Bool bin = 1;

(注意:
bool
\u bool
stdbool.h
的头文件中的宏)

在C中

< C++ >


但是
\u Bool
Bool
的布尔类型真的有效吗


我做了一个测试来确定内存中每个对象的大小:

对于C:

#include <stdio.h>
#include <stdbool.h>   // for "bool" macro.

int main()
{
    _Bool bin1 = 1;
    bool bin2 = 1; // just for the sake of completeness; bool is a macro for _Bool.    

    printf("the size of bin1 in bytes is: %lu \n",(sizeof(bin1)));
    printf("the size of bin2 in bytes is: %lu \n",(sizeof(bin2)));  

    return 0;
}
对于C++:

#include <iostream>

int main()
{
    bool bin = 1;

    std::cout << "the size of bin in bytes is: " << sizeof(bin);

    return 0;
}

因此,布尔类型的对象确实存储在内存中的1字节(8位)内,而不是像通常所需的那样仅存储在1位中

此处讨论的原因:。这不是我的问题


我的问题是:

    为什么我们在C++和<代码> Boo< <代码>中使用了<代码> >代码> >代码> BoOL (<代码> STDBOOL,H < /COD> >,如果他们做了<强>不>强>在内存存储中提供了一个好处,因为它被专门假装使用这些类型?

  • 为什么我不能只使用
    int8\u t
    char
    的类型(假设
    char
    在具体实现中包含8位(通常是这种情况)来代替

是否只是为了给代码读者一个明显的印象,即各个对象仅用于
0
1
/
true
false
目的

非常感谢您的参与

<>为什么我们在C++中使用了C-BOO/BOOL(STDBOOL?H)类型,如果它们在内存存储中没有提供好处,因为它被专门假装使用这些类型?

您在问题中已经提到了原因:

我们使用布尔类型来声明对象,这些对象只应包含0或1的值

特别使用布尔数据类型的优点是,它只能表示true或false。其他整数类型具有更多可表示的值,当您只需要两个时,这是不需要的

为什么我不能只使用int8_t或char的类型(假设在具体实现中char包含8位(通常是这种情况)来代替呢

你可以。事实上,C直到C99标准才有布尔数据类型。请注意,使用
int8_t
的缺点是不能保证由所有系统提供。char的问题是它可以是有符号的,也可以是无符号的

但您不需要这样做,因为您可以使用布尔数据类型


这意味着在布尔类型中使用True或false与在char或int8\t中使用True或false时存在差异。你能说明这一区别吗

考虑以下简单的例子:

int8_t i = some_value;
bool b = some_value;

if (i == true)
if (i)
if (b == true)
if (b)
对于
int8\u t
,这两个条件具有不同的行为,如果选择了错误的形式,这就为行为创造了错误的机会。对于布尔型,它们具有相同的行为,没有错误的选择



另外,如果您想紧凑地存储多个布尔值(以每次读写多条指令为代价),例如,您可以使用
std::bitset
std::vector
。在C语言中没有类似的标准库实用程序,但这种功能可以通过移位和掩蔽来实现。

有多种效率。内存效率是其中之一。速度效率是另一个原因

原始C语言根本没有
boolean
类型——程序员通常会使用
int
作为布尔标志,
0
表示false,
1
表示true。如果他们真的关心内存效率,他们可能会使用位图在一个字节中存储八个布尔值,但这通常只在内存非常缺乏的情况下才有必要。但是访问
int
要比访问
int
然后解压缩其组成位快

\u Bool
/
Bool
是在C99中引入的。它反映了将布尔值存储在int中的常见做法

但是,它的优点是编译器知道它是一个布尔值,因此更难意外地为它赋值
3
,将其添加到整数中,等等

现在大多数编程语言都将布尔值存储在一个字节中。是的,它使用的内存是所需内存的八倍——但是它速度很快,而且很少有一次有这么多布尔运算,以至于浪费了大量内存

在许多编程语言中,实现与语言规范是分开的——Javascript规范没有说明Javascript运行时应该如何存储
true
false
。然而,在C99中,您可以依赖于
true
等同于整数
1

如果布尔值确实占用了太多的系统内存,您可以使用逐位操作将8个布尔值存储在
无符号字符中,或者更大的类型中

如果需要,您可以对运行时操作执行此操作,或者仅在写入输出格式时执行此操作(如果问题是文件系统或网络数据包上记录的大小)


但是,值得注意的是,在许多现代应用程序中,人们非常乐意将
false
表示为7个字节
['”、'f'、'a'、'l'、's'、'e'、''']

使用bool和int的原因之一是为了提高代码的可理解性,让后面的人能够理解并维护代码

想想这些

布尔b; INTC

如果(b==c)

c=2; b=2

现在,我要说的是,将布尔值(真或假)与数字进行比较很可能是一个错误。所以像‘if(b==1)’这样的东西可能表示编码错误。I h
the size of bin1 in bytes is: 1
the size of bin2 in bytes is: 1
#include <iostream>

int main()
{
    bool bin = 1;

    std::cout << "the size of bin in bytes is: " << sizeof(bin);

    return 0;
}
the size of bin in bytes is: 1 
int8_t i = some_value;
bool b = some_value;

if (i == true)
if (i)
if (b == true)
if (b)