为什么在C#中bool数据类型的大小只有1位?

时间:2013-07-19 11:40:04

标签: c# types boolean byte bit

我正在学习C#并深入研究数据类型。

为什么{1}数据类型的大小不是1位?

它似乎只能保存两个值中的一个(真或假),所以不会只占用1位空间来表示该值吗?

是因为this post中提到的值的最小'可寻址'大小是一个字节(8位)?

我的总体目标是在逻辑上设想C#中每种数据类型的不同大小,所以我试图创建一个包含所有数据类型及其分配位大小的列表,这让我感动不已。

3 个答案:

答案 0 :(得分:23)

  

是因为值的最小'可寻址'大小是一个字节

是的,完全一样的事情。为了使CLR高效,它将其数据类型映射到本机机器数据类型,其方式与C ++中的编译器非常相似(几乎)。

答案 1 :(得分:4)

如果要以节省空间的方式存储大量标志,请考虑使用Int32或Int64作为位掩码,这样就可以在32/64位数据类型中存储32或64个布尔标志。您必须进行位掩码测试以检查或设置值,因此通过布尔变量访问或更新的成本会很小。

内存中布尔字段的大小为1个字节,布尔变量的大小为4个字节。

BitArray在处理大量位标志时也很方便:http://msdn.microsoft.com/en-us/library/system.collections.bitarray.aspx

答案 2 :(得分:1)

我也注意到了这一点......我创建了两个数组:float [4000]和float?[4000]。第二个数组需要两倍的内存空间,因为浮点数?实现为float和bool,bool最终取32位与float相同。

所以最后,如果内存使用是一个问题,使用NaN浮点值表示float []中的“null”比使用float?[]更好。

让我感觉自己多年来一直是个白痴我试图使用较小的数据类型,相信它实际上做得很好! : - )