对常量进行‘|’和‘&’运算的意义
来源:互联网 发布:星际皆知你爱我网盘 编辑:程序博客网 时间:2024/06/10 06:28
有时我们需要在代码中定义一些常量代表不同的状态,一般做法就是定义成字符串或者int类型,比如:
public static final String CONTEXT_INCLUDE_CODE = "context_include_code" public static final String CONTEXT_IGNORE_SECURITY = "context_ignore_security"public static final String CONTEXT_RESTRICTED = "context_restricted"
在需要的时候用if判断一下(flag代表传入的状态,下同):
if(flag.equals(CONTEXT_INCLUDE_CODE)){}
这种写法不是不可以,缺点是它内存占用会大一些。如果换成int 可能会比字符串要好一些。
但是但是,如果我们的状态处于上面三种状态的两种,也就是flag可以不可以代表CONTEXT_INCLUDE_CODE或CONTEXT_IGNORE_SECURITY。这个时候我们该怎么做?有没有可能两种状态都存在的情况?
在学习android开发的时候经常会遇到用 16进制去定义常量,这到底有什么好处呢? 我把上面的定义还原成16进制的定义:
public static final int CONTEXT_INCLUDE_CODE = 0x00000001 // 00001public static final int CONTEXT_IGNORE_SECURITY = 0x00000002 // 00010public static final int CONTEXT_RESTRICTED = 0x00000004// 00100
后面的注释简单表示它们的二进制形式。
这里定义的每个常量的值对应的二进制只有一位为1其他都为0。如果还有新的变量,新的值就是0x00000008(01000)。为什么这样?因为其他值可以用定义的变量表示。比如:
flag = CONTEXT_INCLUDE_CODE | CONTEXT_IGNORE_SECURITY =0x00000003// 00011
如此,flag就代表两种状态了,那么判断的时候就不能:
if(flag == CONTEXT_INCLUDE_CODE){}//上面flag的条件就不满足该条件
通过&算符判断就可以满足了,改成:
if((flag & CONTEXT_INCLUDE_CODE) == CONTEXT_INCLUDE_CODE){}
可能有对 ‘|’和‘&’不太熟悉的,这里简单介绍一下:
‘|’是‘或’的意思,对应的运算法则:‘逢1为1’,比如:
0x00000001 二进制为 00001,0x00000002位00010;
0x00000001 | 0x00000002 = 00001 | 00010 = 00011 = 0x00000003.
通俗的理解在二进制数上 只有0和1,‘|’表示 不同为1,相同不变。
‘&’代表‘与’的意思,对应的运算法则:‘同1为1,其他为0’;比如:
0x00000001 & 0x00000002 = 00001 & 00010 = 00000 = 0x00000000.
备注:新手一枚,请大神多大指点!
- 对常量进行‘|’和‘&’运算的意义
- 对图像进行卷积操作的意义!
- STL对已排序的序列进行排序和运算
- matlab的常量和变量&&运算符
- 对图像进行二维傅立叶变换的意义
- 对图像进行二维傅立叶变换的意义
- 对复数进行的+-*/运算符重载
- D3DXVec3Cross运算的意义
- 位运算的意义
- sql AND 和 OR 运算符用于基于一个以上的条件对记录进行过滤
- java中instanceof运算符的意义和用法
- PHP常量和运算符
- 常量、变量、运算符、表达式和赋值语句的使用
- TensorFlow基本的常量、变量和运算操作
- 异或运算的意义
- CHAR定长字段对MyISAM和InnoDB的意义
- 软文推广对网站权重的作用和意义
- H.265 对直播和点播平台的意义
- struts2--全局结果集和异常处理配置
- psql连接oracle,windows不安装oracle,使用oracle组件包连接
- NOIP 2013 Senior 3
- 自定义 view 一 (measure)
- 五种IO模型
- 对常量进行‘|’和‘&’运算的意义
- PHP-遍历二维数组的几种方式
- 【OpenCV】透视变换 Perspective Transformation(续)
- hihocoder 1534 微软探星夏令营笔试A题 (STL)
- You Are the One HDU
- 基础备忘
- .netFramewo 4.0软件报 未能加载文件或程序集“System.Core, Version=2.0.5.0错误处理
- Hadoop和大数据:60款顶级开源工具
- fzu2265Card Game (Second Edition) (数学)(简单)