C#枚举运算使用技巧2010-08-09 15:33位运算符:& (按位与)、| (按位或)、^ (按位异或)、~ (按位取反)、>> (按位右移)、<< (按位左移)。 & ( 按位与): 概念上来讲就是二进制上按每一位(0或1)进行与运算。 那么与运算是什么意思该不用我说吧,就是两者都是1结果为真。其中一个为0结果为假。这里不可能有0、1之外的数,这里是二进制。先看一个8位二进制的例子: 7 & 8 = 0000 0 111 & 0000 1000 = 0000 0000 = 0 7 & 3 = 0000 0111 & 0000 0011 = 0000 0011 = 3 很简单吧。不用多说了,就是操作0和1。 ^( 按位异或): 概念上来讲就是二进制上按每一位(0或1)进行异或运算。 异或运算简单讲就是相同就为假,不同为真。 7 ^ 3 = 0000 0111 ^ 0000 0011 = 0000 0100 = 4 >>( 按位右移): 概念上来讲就是二进制上按每一位(0或1)进行右移运算。 右移运算简单讲就是将二进制的位整体向右移动。 7 >> 2 = 0000 0111 >> 2 = 0000 0001 = 1 // 这里向右移动了2位,最低位的两个1被抹去。 这里右移两位等于除了2的2次方,7/4 = 1 在整数除法中则看成是被舍掉了小数部分。 <<( 按位左移): 这个就不说了,与上面右移方向的相反。 左移两位等于乘以2的2次方 7<<2 = 28; 对一个枚举进行加,减,是否存在操作:比如我有一个枚举是这样: public enum ReadEnum { Add = 1, Update = 2, Delete = 4, Select = 8, All = Add | Update | Delete | Select } 枚举删除操作: ReadEnum RemoveOne(ReadEnum itemNeedRemove, ReadEnum removeItem) { return itemNeedRemove & (ReadEnum.All ^ removeItem); } 是否存在一个枚举操作: bool IsHaveOne(ReadEnum itemNeedAdd, ReadEnum item) { return (itemNeedAdd & item) == item; } 增加一个枚举操作: ReadEnum AddOne(ReadEnum itemNeedAdd, ReadEnum addItem) { return itemNeedAdd | addItem; } 当时学C语言时都很精通,现在都要忘了,在这里记下。 ~( 按位取反): 概念上来讲就是二进制上按每一位(0或1)进行取反运算。 取反运算简单讲就是0变1,1变0。 ~7 = ~0000 0111 = 1111 1 000 = 0xf8 = 248 (无符号) 7 | 8 = 0000 0 111 | 0000 1000 = 0000 1111 = 15 7 | 3 = 0000 0111 | 0000 0011 = 0000 0111 = 7 | ( 按位或): 概念上来讲就是二进制上按每一位(0或1)进行或运算。 那么或运算是什么意思该不用我说吧,就是两者都是0结果为假。其它情况都为真。
c#位操作
最新推荐文章于 2025-05-23 10:16:59 发布