有比byte类型更小的.NET数据类型吗?

7

你听说过Nibble吗?


1
位运算:http://www.blackwasp.co.uk/CSharpLogicalBitwiseOps.aspx - user295190
不客气。 :) 它不是 .NET 数据类型,但它允许您操作字节中的位。您提到了布尔值,您可能还会考虑这个有用的东西:位域 - http://en.wikipedia.org/wiki/Bit_field - user295190
3个回答

16

不行。即使您有一个布尔数组,我认为它们每个都需要占用一个字节。

当然,您可以定义自己的数据类型,其有效值少于256个(如Boolean),但无法使其在内存中占用小于一个字节。

正如LBushkin指出的那样,有一些类型,如BitArrayBitVector32,可以有效地打包多个位 - 如果您愿意,您可以编写自己的NybbleArray类型。


1
@Shimmy:我认为这不正确。我自己查看了反射代码,发现它是作为一个int[]数组实现的,每个int值都用作它自己的打包位组。 - Dan Tao
有没有办法在我尝试将半字节设置为大于0xF的任何值时生成编译器错误? - Shimmy Weitzhandler
1
@Shimmy:不,我不这样认为。 - Jon Skeet
@Shimmy:这个问题应该作为一个单独的问题提出。 - Jon Skeet
@JonSkeet 实际上我认为我已经找到了答案。编译器会自动解决这个问题。 - Shimmy Weitzhandler
显示剩余7条评论

5

没有比byte更小的本地数据类型,但是如果你想存储和操作一组打包的位,可以使用 BitVector32BitArray


我觉得我会使用简单的字节(Byte),因为BitVector的长度是4个字节(Int32)(至少)。 - Shimmy Weitzhandler

1

内存更少?不是。可能的值更少?是的。如果您正在尝试实现一个Nibble类型,那么最好的方法是使用先前提到的BitArray / BitVector或在字节上使用位掩码。 - Mandelbrot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接