Java: |(或运算) 与 多选判断
今天需要在程序中做一个多选判断,突然想起以前经常遇到的 x |= y | z; 这样的,我也明白这个是多选的用意,但为什么能达到我们希望的多选操作,我还真的没去研究过。
今天早上,百度了一下,搜索到了两篇文章:
1) 这个是用C写的,道理都一样。摘自:http://blog.csdn.net/arduousbonze/article/details/1619096
三者的性质
异或运算:相同为0,不同为1
与运算:两者为1时为1,有0为0
或运算:有1为1
定义如下宏:(观察其特点)
#define FLAG_DUPLICATE 0x01 //展开二进制00000001
#define FLAG_VISIBLE 0x02 //展开二进制00000010
#define FLAG_CANSELECT 0x04 //展开二进制00000100
#define FLAG_LABELED 0x08 //展开二进制00001000
#define FLAG_BACKGROUND 0x10 //展开二进制00100000
#define FLAG_SHOWOUTLINE 0x20 //展开二进制01000000
#define FLAG_SHOWATEAGLE 0x40 //展开二进制10000000
(注:在C/C++中八进制以0开头,如0123(区别十进制的123);十六进制以0x开头,如0x40)
这样设置宏目的是为了能够应用位运算的性质来判断复选框的状态
假设用 int nStatus;来存储复选框的结果,可以这样做:
1.若某一个复选框选中则:nStatus=nStatus|FLAG_DUPLICATE;(其他类似)
2.那么如果取消了一个复选框呢?应该这样做:
int mask=0xffffffff^FLAG_DUPLICATE;//(把FLAG_DUPLICATE中为"1"的那一位置为0,其它位都为1)
nStatus=nStatus&mask;(其他类似)
3.如何判断某一复选框是否被选中呢?这样做:
if(nStatus&FLAG_DUPLICATE==FLAG_DUPLICATE)
cout<<"选中"<<endl;
else
cout<<"未选中"<<endl;
例子:
//取消复选框
void __fastcall LayerInfo::SetVisible(bool bVisible)
{
if(bVisible)
m_nStatus=m_nStatus|FLAG_VISIBLE;
else
{
int mask = 0xffffffff^FLAG_VISIBLE;
m_nStatus=m_nStatus&mask;
}
layer->Visible= bVisible;
}
//判断某一复选框是否被选中
if(m_nStatus&FLAG_SHOWOUTLINE==FLAG_SHOWOUTLINE)
layer->Symbol->Outline=true;
else
layer->Symbol->Outline=false; 还有一篇: http://blog.csdn.net/battlehawk/article/details/5271327 另外我写了一个简单的测试|(或运算)的例子,根据输出的结果,看出规律来了吧:
System.out.println(-1 | -1); //输出 -1
System.out.println(-1 | 0); //输出 -1
System.out.println(-1 | 1); //输出 -1
System.out.println(0 | 0); //输出 0
System.out.println(0 | 1); //输出 1
System.out.println(0 | 2); //输出 2
2011-12-31
Java: |(或运算) 与 多选判断的更多相关文章
- Java位运算总结:位运算用途广泛《转》
前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...
- Java位运算原理及使用讲解
前言日常开发中位运算不是很常用,但是巧妙的使用位运算可以大量减少运行开销,优化算法.举个例子,翻转操作比较常见,比如初始值为1,操作一次变为0,再操作一次变为1.可能的做法是使用三木运算符,判断原始值 ...
- Java位运算总结:位运算用途广泛
前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...
- Java 位运算超全面总结
1.原码.反码.补码 关于原码.反码.补码的相关知识作者不打算在这里长篇大论,相关知识已有别的大佬总结很好了,还请老铁自行 Google,不过有篇知乎回答是作者学编程以来见过对相关知识最通俗易懂,生动 ...
- 我们必须要了解的Java位运算(不仅限于Java)
本文原创地址为 https://www.cnblogs.com/zh94/p/16195373.html 原创声明:作者:陈咬金. 博客地址:https://www.cnblogs.com/zh94/ ...
- Java 位运算2-LeetCode 201 Bitwise AND of Numbers Range
在Java位运算总结-leetcode题目博文中总结了Java提供的按位运算操作符,今天又碰到LeetCode中一道按位操作的题目 Given a range [m, n] where 0 <= ...
- js,java,浮点数运算错误及应对方法
js,java浮点数运算错误及应对方法 一,浮点数为什么会有运算错误 IEEE 754 标准规定了计算机程序设计环境中的二进制和十进制的浮点数自述的交换.算术格式以及方法. 现有存储介质都是2进制.2 ...
- java中字符串的非空判断
问题如下:在java 中 字符串为null 如何判断String str;if(str==null) ??str.equal("null") ?? 答:我觉得应该搞清楚字符串对象和 ...
- 收藏的一段关于java大数运算的代码
收藏的一段关于java大数运算的代码: package study_02.number; import java.math.BigDecimal; import java.math.BigIntege ...
随机推荐
- 一个高性能的对象属性复制类,支持不同类型对象间复制,支持Nullable<T>类型属性
由于在实际应用中,需要对大量的对象属性进行复制,原来的方法是通过反射实现,在量大了以后,反射的性能问题就凸显出来了,必须用Emit来实现. 搜了一圈代码,没发现适合的,要么只能在相同类型对象间复制,要 ...
- Maven 项目生成或者update jdk变为1.5的问题
在使用Maven构建项目时,生成的maven项目jdk默认使用的是jdk1.5. 在手动修改了jdk之后,update project之后jdk又会变为1.5. 或者用eclipse的Maven插件生 ...
- Python_试题_23
# Python基础数据类型考试题# 考试时间:两个半小时 满分100分(80分以上包含80分及格)# 一,基础题.# 1,简述变量命名规范(3分)# 答:变量名是由数字.字母.下划线任意组合,变量名 ...
- git-两小时简单使用教程
两小时学会Git玩转Github 1. 了解Git和Github 1.1什么是Git Git是一个免费.开源的版本控制软件 1.2什么是版本控制系统 版本控制是一种记录一个或若干个文件内容变化,以便将 ...
- Linux内核分析——程序破解
1. 掌握NOP.JNE.JE.JMP.CMP汇编指令的机器码 NOP:NOP指令即“空指令”.执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令.(机器码: ...
- 我的Android之路——底部菜单栏的实现
底部菜单栏的实现 底部菜单栏两种实现方法:ViewPager:可滑动的界面:Fragment:固定的界面. 首先,页面布局,在除去顶部toolbar之后,将主界面分为两部分,一部分为界面显示区,另一部 ...
- github个人作业
信息学院本科生课程设计 题目 文件加密和解密 课程名称 面向对象程序设计课程设计 课程编号 X031749 所在专业 计算机科学与技术 所在班级 计科高职13-3 ...
- HDOJ4548_美素数
简单的素数问题 HDOJ4548_美素数 #include<stdio.h> #include<stdlib.h> #include<math.h> #includ ...
- Max length of title attribute in html
测了一下chrome是1024个utf-8字符. 具体可见: http://stackoverflow.com/questions/8516235/max-length-of-title-attrib ...
- 自定义组件的 v-model
Vue.component('base-checkbox', { model: { prop: 'checked', event: 'change' }, props: { checked: Bool ...