BitArray

作者:追风剑情 发布于:2017-3-24 14:47 分类:C#

  1. using System;
  2. /// <summary>
  3. /// Bit索引器类
  4. /// </summary>
  5. public sealed class BitArray {
  6.  
  7. private byte[] m_byteArray;
  8. private Int32 m_numBits;
  9.  
  10. public BitArray(Int32 numBits)
  11. {
  12. if (numBits <= 0)
  13. throw new ArgumentOutOfRangeException("numBits must be > 0");
  14.  
  15. m_numBits = numBits;
  16. m_byteArray = new Byte[(numBits+7)/8];
  17. }
  18.  
  19. public Int32 Length
  20. {
  21. get
  22. {
  23. return m_numBits;
  24. }
  25. }
  26.  
  27. //索引器
  28. //编译器会默认生成get_Item和set_Item访问器
  29. //也可以用System.Runtime.CompilerServices.IndexerNameAttribute来重命名访问器
  30. //[IndexerName("Bit")]
  31. public Boolean this[Int32 bitPos]
  32. {
  33. get
  34. {
  35. if (bitPos < 0 || bitPos >= m_numBits)
  36. throw new ArgumentOutOfRangeException("bitPos");
  37.  
  38. return (m_byteArray[bitPos / 8] & (1 << (bitPos % 8))) != 0;
  39. }
  40.  
  41. set
  42. {
  43. if (bitPos < 0 || bitPos >= m_numBits)
  44. throw new ArgumentOutOfRangeException("bitPos", bitPos.ToString());
  45.  
  46. if (value)
  47. {
  48. //将指定索引处的位设为true
  49. m_byteArray[bitPos / 8] = (Byte)(m_byteArray[bitPos / 8] | (1 << (bitPos % 8)));
  50. }
  51. else
  52. {
  53. //将指定索引处的位设为false
  54. m_byteArray[bitPos / 8] = (Byte)(m_byteArray[bitPos / 8] & ~(1 << (bitPos % 8)));
  55. }
  56. }
  57. }
  58. }


System.Collections.BitArray

标签: C#

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号