int、char、float和bool中最小的一个
Of int, char, float, and bool, which is smallest?
以下是英国大学游戏开发硕士申请过程中的"在家填写"编程测试:
C++基础
如果程序声明了四个变量,其中一个为
int
类型,另一个为float
,类型为char
的一个和类型为bool
的一个,哪个变量会占用内存中最小的空间吗?
- int
- 炭
- 浮子
- bool
根据说明书,只有一句话是真实的。然而,我的C++书(C++Pocket Reference,O’Reilly)指出:"bool的典型大小是一个字节,"answers"char的大小是一字节。从技术上讲,字节的大小是由实现定义的,但它很少是八位。"
我是不是误解了什么?你会给出什么答案,为什么?
没有一种类型的比char
少,因为根据定义sizeof(char) == 1
。然而,完全有可能所有类型都占用相同的空间量。
(用16位表示每种类型(具有适当的不寻常浮点格式)将足以满足标准值范围要求;存在每种类型都有32位的真实硬件。)
如果一个程序声明了四个变量,一个类型为int,一个为float,一个是char,还有一个是bool,那么哪个变量会占用内存中最少的空间?
你发布的问题的真正问题在于这些词:
occupy ... space in memory
如果要假设一个解释,那么在大多数情况下,您会假设当前流行的编译器之一,在这种情况下,答案2
和4
都会占用内存中的最小空间。简单地说,因为当前流行的编译器使char
和bool
在内存中占据单个字节。。。
如评论中所述,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
的实现,要么意味着只有一个变量的大小最小。
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如何有效地将一个大std::字符串的一部分转换为float
- 在向量C++中查找特定的第一个和最后一个索引<float>
- int、char、float和bool中最小的一个
- 在QT中,是否有一个用于double、float、int等的动态数组.即QDoubleArray
- 从istream中获取下一个float
- 用SWIG包裹一个4维标准::向量 std::complex。<float>
- C++ 创建一个 std::vector<float> const& 对象
- 是否有一种方法可以正确地比较一个float值是否大于/小于另一个
- 静态const双/float类,好或不好,请给我一个当前的答案
- Int到float的转换会产生一个警告
- 我如何使用3个重载函数(参数的差异是int, long, float)同时只要求一个输入项