1 /// <summary> 2 /// 根据Int类型的值,返回用1或0(对应True或Flase)填充的数组 3 /// <remarks>从左侧最高位开始向右索引</remarks> 4 /// </summary> 5 /// <param name="value"></param> 6 /// <returns></returns> 7 public List<bool> GetBitList(int value) 8 { 9 var list = new List<bool>(32); 10 for (var i = 0; i <=31; i++) 11 { 12 var offset = (int)Math.Pow(2, i); 13 var rst = (value & offset) == offset; 14 list.Add(rst); 15 } 16 return list; 17 } 18 19 /// <summary> 20 /// 返回Int数据中某一位的值(0或1) 21 /// <remarks>从左侧最高位开始向右索引</remarks> 22 /// </summary> 23 /// <param name="value"></param> 24 /// <param name="index">32位数据位的具体索引值0~31</param> 25 /// <returns>返回值为-1表示获取值失败</returns> 26 public int GetBitValue(int value, ushort index) 27 { 28 if (index > 31) return -1; //超过32位索引 29 var offset = (int)Math.Pow(2, index); 30 var rst = (value & offset) == offset ? 1 : 0; 31 return rst; 32 } 33 34 /// <summary> 35 /// 设定Int数据中某一位的值(0或1) 36 /// <remarks>从左侧最高位开始向右索引</remarks> 37 /// </summary> 38 /// <param name="value">位设定前的值</param> 39 /// <param name="index">32位数据位的具体索引值0~31</param> 40 /// <param name="bitValue">true设为1,false设为0</param> 41 /// <returns>返回位设定后的值</returns> 42 public int SetBitValue(int value, ushort index, bool bitValue) 43 { 44 if (index > 31) throw new ArgumentOutOfRangeException("index"); //超出32位索引 45 var offset = (int)Math.Pow(2, 31-index); 46 var rst = bitValue ? (value | offset) : (value ^ offset); 47 return rst; 48 }
接位操作,直接操作INT数据类型的某一位
32位INT用到31天的每个月,很强大哟。嘿嘿~~~~~具体作用,就看人和项目需求了。