【问题标题】:Is there a .NET data-type smaller than a byte?是否存在小于字节的 .NET 数据类型?
【发布时间】:2011-03-13 22:05:21
【问题描述】:

Nibble 之类的怎么样?

【问题讨论】:

标签: .net vb.net types byte nibble


【解决方案1】:

不,字节是最小的。

这可能会有所帮助:How can you nibble (nybble) bytes in C#?

【讨论】:

  • 内存少?不。可能的值更少?是的。如果您尝试实现 Nibble 类型,那么最好的方法是使用前面提到的 BitArray/BitVector 或对字节使用位掩码。
【解决方案2】:

没有小于字节的原生数据类型,但是如果您想存储和操作一组打包位,您可以使用BitVector32BitArray

【讨论】:

  • 我想我会使用简单的字节,因为 BitVector 是 4 字节(Int32)长度(至少)。
【解决方案3】:

没有。即使你有一个布尔数组,我相信它们被指定为每个占用一个字节。

当然,您可以定义自己的数据类型,其有效值少于 256 个(如 Boolean 所做的那样),但您不能让它在内存中占用少于一个字节。

正如 LBushkin 所指出的,BitArrayBitVector32 等类型可以有效地打包多个位 - 如果需要,您可以编写自己的 NybbleArray 类型。

【讨论】:

  • 我只是看了一下反射的 BitArray,它只是一个具有一些功能的布尔数组,对于性能和便携性而言,这不是最好的主意。
  • @Shimmy: 嗯……我可能对布尔数组占用的空间有误,当然……
  • @Shimmy:我不认为这是正确的。我自己查看反射的代码,我看到它是作为int[] 数组实现的,每个int 值都充当自己的打包位组。
  • @Dan,对,所以无论如何,它肯定比单个 Byte 实现(至少 4 个字节)大,所以结论是,如果你想实现一个 Nibble,那么它可能应该用底层 Byte 或 SByte 以获得最佳性能能力(不要忘记它是一个值类型),或者如果您需要它来玩单个 Nibbles,那么我最好建议使用现有的 BitArray 或 BitConverter 共享(静态)方法或实现另一个与您自己的功能共享类,或者只是将其全部嵌入到您的字节实现的 Nibble 结构中,这就是我要做的..
  • @Shimmy:不,我不这么认为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-04
  • 2017-05-19
相关资源
最近更新 更多