布尔值的最小大小是多少
What is the minimum size of a boolean?
我在研究Stanley B.Lippman在C++Prime中的算术类型。当作者谈到积分类型以及它们中每一个的大小时,比如char是8位,我注意到布尔值的最小大小并不那么清楚。考虑类型转换,以及以下代码:
bool b = 42; // b is true
int i = b; // i had value 1
我可以说布尔值具有相同的整数(通常为16位(的最小大小吗?因为如果它为假,则为0,即一个int,如果它为真,则为1,即另一个int?如果我说的是错的,那么布尔值的最小大小是多少?
bool
至少占用1个字节。即使只有true
或false
两个选项,它也不能是1位,因为bool
需要是可寻址的。
布尔值的最小大小是多少?
在标准中,您可以阅读5.3.3:
将sizeof应用于任何其他基本类型(3.9.1(的结果为实现定义。[注意:特别是sizeof(bool(、sizeof(char16_t(、sizeof(char32_t(和sizeof(wchar_t(是实现定义的。75——尾注]
注意:
sizeof(bool(不需要是1
所以它可能是1个字节,但也可能是4个字节。标准还允许int的大小1字节16bits:
1==sizeof(char(<=sizeof(短(<=sizeof(int(<=sizeof(长(<=的大小
所以bool的最小大小是1字节,与int的大小相同。另一个问题是,您是否会找到具有1字节int
类型的平台
[编辑]
int
的最小大小(保证最小值(是16位,C和C++中的积分/算术类型的这种大小保证解释了原因。
“布尔型”以及C++类型bool
。
不是比特字段的bool
最小为1字节,即sizeof(bool)
≥1.这个限制是因为字节是最小可寻址单元;任何C++对象都至少是1个字节。该标准对bool
的大小没有任何上限,但在实践中,它不会大于单个存储器读写操作所能处理的大小。
布尔变量是用于实现布尔概念的任何变量。有很多布尔类型,不仅仅是C++自己的bool
。例如,在Windows编程中,BOOL
类型超过一个字节,在某些情况下,它可以通过任何非零值表示逻辑true。
在某些情况下,对于布尔值的集合,它们可以分别用1位来表示,例如在std::bitset
或std::vector<bool>
中(为了允许这种情况,对项目类型bool
进行特殊大小写(。或者,我相信,但我还没有检查是否支持bool
类型的大小为1的位字段。这些考虑意味着这个问题有点过于模糊,无法给出简单明了的答案。如果您询问sizeof(bool)
,它会更加明确:根据实现情况,只有1个或更多字节。
不,你不能。
布尔值具有不同的大小。有时Ints可以被视为布尔值,因为0,1,但这并不意味着布尔值的大小与Int相同。
我可以说布尔值具有与整数相同的最小大小吗
不,如果可以的话,它会在标准中。
出于速度原因,现代系统(x86/x64(上的大多数标准实现都使用与寄存器大小相同的bool
(分别为32/64位(。然而,没有什么能阻止您拥有位大小的bool
变量,它们只是一个简单的位字段!在微控制器实现中,bool
通常尽可能小(单个字节(,因为您的内存非常有限。
在c99标准中(http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf)整数被定义为跨越至少范围[-3276732767](见5.2.4.2.1节(。然而,规范也规定(在6.2.5.2中(
声明为类型_Bool的对象足够大,可以存储值0和1。
这意味着,规范绝不要求它们的大小相同。满足规范并不需要它们匹配。对于一个特定的实现来说,选择它们具有相同的大小显然是可能的(尽管不太可能(。但这不是你可以/应该依赖的。
如果代码中有bool b = 42;
,编译器会发现42
不是bool
类型,并将其视为bool b = true;
当您稍后编写时,int i = true
编译器将再次发现,true
不是整数,并将其视为int i = 1
,因为根据定义,0
是false
,每隔一个int是true
。
然而,谈论类型的大小是不同的。bool
的大小将始终至少为8bit
秒,因为地址就是这样工作的。
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么在浮点中从大到小会引入更多的误差
- 最大和最小 1 C++函数
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 在二维数组中查找最小值和最大值?
- 查找矩阵C++中每一列和每一行的最小和最大元素
- 有没有办法在 c++ 中按更大的 int 和更小的对对 int 和对的集合进行排序?
- 如何在数组中交换最小和最大的位置?
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- 在二维向量或数组中可以存储的最大元素数是多少?
- 从较小的阵列到较大的阵列的元素级转换
- C++ 函数,用于查找传入的 N 个数字的平均值、总和、最小值和最大值
- txt 文件中浮点数的最大和最小值
- 查找最小的下一个更大的元素
- 在最小堆中查找最大元素
- C++不同的最小最大值实现
- 查找数组中指示性较大但数组中值较小的元素
- 在 c++ 中,能够将浮点类型加 1 的最大整数是多少?
- C++ 100 万个变量名称的最小和最大变量名称长度是多少
- C中的最大值和最小值是多少#定义函数