在枚举中使用位移运算,来判断层叠块

如:k1=2 ; //添加

k2=4 ; //删除

k3=8; //修改

purview = k2|k3; // 赋给添加和删除权限

解释:

第一,2的8位二进制值为00000010

4的8位二进制值为00000100

8的8位二进制值为00001000

第二,当对8和4进行按位或(|)操作后,结果为:

4|8 = 12

00000100 |00001000 = 00001100

为什么会是这样呢?在进行按位或操作时 00000001|00000001=00000001 ; 00000001|00000000=1 ; 00000000|00000000=00000000

也就是说除了0|0结果是0外,其它运算结果的都是1

所以    00000100 |00001000 = 00001100

也就说上面的 purview = k2|k3 的二进制值结果是 purview =00000100 |00001000 =00001100

第三,当对8和4进行按位与(&)操作后,结果为:

4&8=0

00000100 &00001000 = 00000000

同样为什么会是这样呢?在进行按位与操作时 00000001&00000001=00000001   ;00000001&00000000=00000000 ;00000000&00000000=00000000

也就是说除了1&1结果是1外,其它运算结果的都是0

所以 00000100 &00001000 = 00000000

           上面的if((purview & k1) >0)的结果就是 00001100&00000010 =00000000 也就是(0>0)=false

           同样if((purview & k2) >0)的结果就是 00001100&00000100 =00000100=4=k2 也就是 (4>0)=true

时间: 2024-11-10 08:05:45

在枚举中使用位移运算,来判断层叠块的相关文章

枚举中的位运算

为什么枚举中位运算都可以使用并运算? 1.  什么是枚举中的位运算? 例如 int a = 1 << 0; //1左移0位    1*2^0 = 1; int b = 1 << 1; //1左移1位   1*2^1 = 2; int c = 1 << 2; //1左移2位   1*2^2 = 4; int d = 1 << 3; //1左移3位   1*2^3 = 8; 并运算 a | b 01 10 -------------- 11 ==1+2 int

1&lt;&lt;30 hashMap 中使用位移运算的意义

static final int MAXIMUM_CAPACITY = 1 << 30; 计算过程已1<<30为例,首先把1转为二进制数字 0000 0000 0000 0000 0000 0000 0000 0001 然后将上面的二进制数字向左移动30位后面补0得到 01000000 00000000 00000000 00000000(共计32位,是int的最大长度,第一位标示的是符号)即0x4000 0000 java语言要2的n次方咋写呀 Math.pow(2,n). 这里

C#学习笔记-----C#枚举中的位运算权限分配

什么是位运算 常用的位运算主要有与(&), 或(|)和非(~), 比如: 1 01 & 00 = 00; 2 01 | 00 = 01; 3 ~01 =0 0; 运用在权限设计中 先建立一个枚举表示所有的权限管理操作: 1 [Flags] 2 public enum Permissions 3 { 4 Insert = 1, 5 Delete = 2, 6 Update = 4, 7 Query = 8 8 } [Flags]表示该枚举可以支持C#位运算. 枚举的每一项值, 我们用2的n次

C#枚举中的位运算权限分配

什么是位运算 常用的位运算主要有与(&), 或(|)和非(~), 比如: 1 01 & 00 = 00; 2 01 | 00 = 01; 3 ~01 =0 0; 运用在权限设计中 先建立一个枚举表示所有的权限管理操作: 1 [Flags] 2 public enum Permissions 3 { 4 Insert = 1, 5 Delete = 2, 6 Update = 4, 7 Query = 8 8 } [Flags]表示该枚举可以支持C#位运算. 枚举的每一项值, 我们用2的n次

C#枚举中的位运算权限分配浅谈

常用的位运算主要有与(&), 或(|)和非(~), 比如: 1 & 0 = 0, 1 | 0 = 1, ~1 = 0 在设计权限时, 我们可以把权限管理操作转换为C#位运算来处理. 第一步, 先建立一个枚举表示所有的权限管理操作: [Flags] public enum Permissions { Insert = 1, Delete = 2, Update = 4, Query = 8 } [Flags]表示该枚举可以支持C#位运算, 而枚举的每一项值, 我们用2的n次方来赋值, 这样表

Java 中的位移运算

位移运算符就是在二进制的基础上对数字进行平移.按照平移的方向和填充数字的规则分为三种:<<(左移).>>(带符号右移)和>>>(无符号右移). 计算规则如下: ①左移n位相当于乘以2的n次方. ②右移n位相当于除以2的n次方.这里是取商哈,余数就不要了. ③ >>>(无符号右移) 运算规则: 按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补零.对于正数来说和带符号右移相同,对于负数来说不同. 其他结构和>>相似

Java位移运算

位移运算符用来将操作数向某个方向(向左或者右)移动指定的二进制位数.在Java中,位移运算分为左位移和右位移,符号为<<和>>. 左位移运算符 左位移的符号是<<,其运算规则是:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零. 例如,将整数 11 向左位移 1 位的过程如图所示: 从图中可以看到,原来数的所有二进制位都向左移动 1 位.原来位于左边的最高位 0 被移出舍弃,再向尾部追加 0 补位.最终到的结果是 22,相当于原来数的 2 倍

Swift学习之位移枚举的按位或运算

在OC里面我们经常遇到一些枚举值可以多选的,需要用或运算来把这些枚举值链接起来,这样的我们称为位移枚举,但是在swift语言里面却不能这么做,下面来讲解一下如何在swift里面使用 OC的位移枚举的区分 //位移枚举typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) { UIViewAutoresizingNone = 0, UIViewAutoresizingFlexibleLeftMargin = 1 << 0, UIViewAutores

Why coding like This ------ 递归以及枚举中的递归

title: "Why coding like This -- 递归以及枚举中的递归" date: 2015-08-28 21:34:16 categories: "why coding like this" tags: [swift进阶] Topic 1: 输入一个数组xs:[Int],对全体元素求和. Discuss 思路一: Hey,伙计,遍历数组,逐个相加,so easy! code: func sum1(xs:[Int])->Int{ var sum