代码改变世界

C#按位操作,直接操作INT数据类型的某一位

2013-11-06 11:20  咒语  阅读(8038)  评论(0编辑  收藏  举报
 1 /// <summary>
 2         /// 根据Int类型的值,返回用1或0(对应True或Flase)填充的数组
 3         /// <remarks>从右侧开始向左索引(0~31)</remarks>
 4         /// </summary>
 5         /// <param name="value"></param>
 6         /// <returns></returns>
 7         public static IEnumerable<bool> GetBitList(int value)
 8         {
 9             var list = new List<bool>(32);
10             for (var i = 0; i <= 31; i++)
11             {
12                 var val = 1 << i;
13                 list.Add((value & val) == val);
14             }
15             return list;
16         }
17 
18         /// <summary>
19         /// 返回Int数据中某一位是否为1
20         /// </summary>
21         /// <param name="value"></param>
22         /// <param name="index">32位数据的从右向左的偏移位索引(0~31)</param>
23         /// <returns>true表示该位为1,false表示该位为0</returns>
24         public static bool GetBitValue(int value, ushort index)
25         {
26             if (index > 31) throw new ArgumentOutOfRangeException("index"); //索引出错
27             var val = 1 <<index;
28             return (value & val) == val;
29         }
30 
31         /// <summary>
32         /// 设定Int数据中某一位的值
33         /// </summary>
34         /// <param name="value">位设定前的值</param>
35         /// <param name="index">32位数据的从右向左的偏移位索引(0~31)</param>
36         /// <param name="bitValue">true设该位为1,false设为0</param>
37         /// <returns>返回位设定后的值</returns>
38         public static int SetBitValue(int value, ushort index, bool bitValue)
39         {
40             if (index > 31) throw new ArgumentOutOfRangeException("index"); //索引出错
41             var val = 1 << index;
42             return bitValue ? (value | val) : (value & ~val);
43         }

2013-11-7优化了一下

接位操作,直接操作INT数据类型的某一位
32位INT用到31天的每个月,很强大哟。嘿嘿~~~~~具体作用,就看人和项目需求了。