int、char、float和bool中最小的一个

Of int, char, float, and bool, which is smallest?

本文关键字:一个 float char bool int      更新时间:2023-10-16

以下是英国大学游戏开发硕士申请过程中的"在家填写"编程测试:

C++基础

如果程序声明了四个变量,其中一个为int类型,另一个为float,类型为char的一个和类型为bool的一个,哪个变量会占用内存中最小的空间吗?

  1. int
  2. 浮子
  3. bool

根据说明书,只有一句话是真实的。然而,我的C++书(C++Pocket Reference,O’Reilly)指出:"bool的典型大小是一个字节,"answers"char的大小是一字节。从技术上讲,字节的大小是由实现定义的,但它很少是八位。"

我是不是误解了什么?你会给出什么答案,为什么?

没有一种类型的char,因为根据定义sizeof(char) == 1。然而,完全有可能所有类型都占用相同的空间量。

(用16位表示每种类型(具有适当的不寻常浮点格式)将足以满足标准值范围要求;存在每种类型都有32位的真实硬件。)

如果一个程序声明了四个变量,一个类型为int,一个为float,一个是char,还有一个是bool,那么哪个变量会占用内存中最少的空间?

你发布的问题的真正问题在于这些词:

occupy ... space in memory

如果要假设一个解释,那么在大多数情况下,您会假设当前流行的编译器之一,在这种情况下,答案24都会占用内存中的最小空间。简单地说,因为当前流行的编译器使charbool在内存中占据单个字节。。。

如评论中所述,sizeof() is of type size_t是不可或缺的。

由于sizeof(char) == 1按标准始终为真,且该值为整数;没有其他CCD_ 14可以低于CCD_。但根据实现方式的不同,除了char之外的任何其他T都可以大于1。由于你不能假设sizeof(char) == sizeof(bool)总是成立,所以你至少可以假设sizeof(char) <= sizeof(bool)成立。

这使得sizeof(char)成为最不正确的答案

答案是char。没有其他答案是正确的。

(尽管我同意这个问题应该措辞更好)。

C++03标准$5.3.3/1说:

sizeof(char)、sizeof(signed char)和sizeof(unsigned char)为1;这个将sizeof应用于任何其他基本类型(3.9.1)的结果为实现定义。[注:特别是sizeof(bool)和sizeof(wchar_t)是实现定义的。69)

(从另一个问题中找到了这一信息:为什么标准本身没有将sizeof(bool)定义为一?)。

假设最小大小为1(sizeof必须返回整数值),这意味着以下情况在任何遵循标准的实现中都是正确的:

sizeof(char) == 1
sizeof(bool) >= 1
sizeof(int) >= 1
sizeof(float) >= 1

这个问题措辞不当,可能应该更清楚地问到"…哪个变量在内存中必然不会比任何其他变量占用更多的空间(在任何表现良好的C++标准实现中)?"

该语言没有指定这些类型大小之间的任何关系,以保证对所提出的问题给出正确的答案。例如,它们都可以是32位类型。

我认为正确答案应该是2。根据定义,char是最小的可寻址单元。

另请参阅:为什么c++中的char和bool大小相同?

C++标准给出了以下关系:

sizeof(char) == 1
sizeof(char) <= sizeof(int) <= sizeof(long)
sizeof(float) <= sizeof(double)

无法保证这些类型的确切大小,但有一个保证,即char不大于short,short不大于long。

因此,char总是占用最少的内存,但它可能不是唯一一个这样做的。它仍然可以保证,没有其他东西的大小会更小。

然而,在一些特殊的嵌入式微控制器上,bool可能会有一个例外。它们可以有一个bit变量,只需要一位,但它们不在RAM中,而是在特殊寄存器中。

然而,除非您的体系结构和编译器特别奇怪或不寻常,否则您可以合理地预期char是1,short是2,long是4,long long是8,int是2或4,但通常是4字节长。

sizeof(bool)是实现定义的。

是否定义了sizeof(bool)?

也就是说,它不需要仅为单个字节。

理论上正确的答案是布尔值,因为char需要至少8位的知识,而bool在技术上只需要一位。理论上,如果你想的话,你可以在一个字符内打碎8个bool。

bool的典型大小为一个字节并不意味着总是是一个字节。这个问题要么是指没有一个字节大小的bool的实现,要么意味着只有一个变量的大小最小。