常见位操作:获取,设置,清零

 1 /*常见位操作:获取,设置,清零
 2  * 
 3  * */
 4 public class BitGet {
 5     /*
 6      * 该函数实现获取功能
 7      * 先将1左移动i位,左移动0位变成了00000001,
 8      * 然后再和Num十进制12转化为二进制00001100进行&运算,
 9      * 00000001   如果是左移动两位就为  00000100
10      * 00001100                    00001100
11      * --------                    --------
12      * 00000000                    00000100
13      * 从而将第i位除外的所有位清零,最后,检查该结果是不是为零
14      * 不为零则说明第i位为1,否则就是零
15      * */
16     public boolean getBit(int num,int i)
17     {
18         return ((num&(1<<i))!=0);
19     }
20     /*该函数实现置位功能
21      * 先将1左移动i位,得到形如00001000的值,接着,对这个值和Num进行位或运算
22      * 这样只会改变第i位的值,不会影响Num其他位
23      * 如下
24      * 12的二进制码为00001100
25      * 如果把第1个位进行置位得到
26      * 00001100
27      * 00000010
28      * --------
29      * 00001110
30      * 就是把第二位置为1,其他的都不变
31      * */
32     public int setBit(int num,int i)
33     {
34         return num|(1<<i);
35     }
36     /*
37      * 该函数实现清零功能
38      * 该方法与setBit刚好相反,首先,将1向左移动i位,然后对这个值取反得到其掩码
39      * 接着,对该掩码和Num执行位与运算,这样只会清零num的i位,其余位则保持不变
40      * 如下
41      * 12的二进制为00001100
42      * 假设要清零第3位 则有
43      * 1.将1向左移动3位得 00001000
44      * 2.取反 得11110111
45      * 3.进行位与运算
46      * 11110111
47      * 00001100
48      * --------
49      * 00000100
50      * 可以得出只是对第三位清零,其他保持不变
51      * */
52     public int clearBit(int num,int i)
53     {
54         int mask=~(1<<i);
55         return num &mask;
56     }
57     public static void main(String[] args) {
58         // TODO Auto-generated method stub
59         BitGet bg = new BitGet();
60         boolean flag=bg.getBit(12, 3);
61         System.out.println(flag);
62         int value = bg.setBit(12, 1);
63         System.out.println("置位第1位为:"+value);
64         value=bg.clearBit(12, 3);
65         System.out.println("清零第3位为:"+value);
66         
67     }
68 
69 }

 

转载于:https://www.cnblogs.com/luoweiKnowledge/p/3960715.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/407226.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS Grid布局(2)

6.间距 grid-column-gap和grid-row-gap属性用来创建列与列&#xff0c;行与行之间的间距 间距(Gap)可以设置任何非负值&#xff0c;长度值可以是px、%、em等单位值 grid-gap是grid-row-gap和grid-column-gap两个属性的缩写 如果它指定了两个值&#xff0c;那么第一个值是设置…

linux怎么使多条命令同时执行

一次执行多个bai命令可以将多个命令用du英文分号分割&#xff0c;比如像这样&#xff1a;zhi mkdir /tmp/mydir; touch /tmp/mydir/myfile 其实这样也倒不能算是同时执行&#xff0c;Linux的命令是顺序执行的&#xff0c;就算是shell脚本&#xff0c; 里面写了一大堆命令&#…

React开发(124):ant design学习指南之form中的属性isFieldTouched

没有值的时候返回提示的error 有值返回undefined

食品安全--牛奶和蛋白质浅谈

蛋白质才是牛奶中的主要营养成分&#xff0c;鲜牛奶的国家标准是100毫升≥2.95克&#xff0c;而纯正的生鲜牛奶的蛋白质含量一般在3&#xff05;以上&#xff0c;一般都能达到国家标准。 食品工业上检测牛奶蛋白质含量被定为国家标准的是凯氏定氮法。原理很简单&#xff1a;蛋白…

HDU 4990 Ordered Subsequence --数据结构优化DP

题意&#xff1a;给一串数字&#xff0c;问长度为m的严格上升子序列有多少个 解法&#xff1a;首先可以离散化为10000以内&#xff0c;再进行dp&#xff0c;令dp[i][j]为以第i个元素结尾的长度为j的上升子序列的个数&#xff0c; 则有dp[i][j] SUM(dp[k][j-1]) (a[k] < a[…

OpenGL 开发环境配置

From: http://www.cnblogs.com/kesalin/archive/2009/09/08/1562499.html OpenGL 下有一些重用的辅助库&#xff0c;比如glut,glee,glew等等&#xff0c;在windows平台下需要自己安装&#xff0c;因为微软为了推广自己的DX&#xff0c;在windows下只支持openGL 1.1版本。你可以…

CSS Grid布局(3)

10.网格线命名 通过grid-template-rows和grid-template-columns定义网格时&#xff0c;网格线可以被命名。网格线名称也可以设置网格项目位置 grid-template-rows和grid-template-columns定义你的网格&#xff0c;将名称分配给网格线 定义网格线名称时需要避免使用规范中出现…

main.js中的Vue.config.productionTip = false

开发模式&#xff1a;npm run dev是前端自己开发用的 生产模式&#xff1a;npm run build 打包之后给后端放在服务端上用的 Vue.config.productionTip false 1 上面这行代码的意思 是阻止显示生产模式的消息。 如果没有这行代码&#xff0c;或者设置为true&#xff0c;控制台就…

VS 2010 OpenGL 配置与实例开发

首先参考了网上的安装配置环境部分&#xff1a;http://blog.csdn.net/Ididcan/article/details/4490797 最近准备学习OpenGL,结果发现敲入书中给的代码&#xff0c;居然提示头文件找不到&#xff0c;相当郁闷&#xff0c;查了一下才发现有些不是VC自带的&#xff0c;需要自己下…

《COM原理与应用》学习笔记二——COM对象和COM接口的实现

COM对象是给用户提供服务的封装的实体。这个应该和C中类的对象理解起来是相似的。但是有时候也把COM对象当作提供服务的那个类。COM对象也对数据进行了封装&#xff0c;然后也提供了接口。不过和类还是有一些不一样的。类中的数据可以申明为public&#xff0c;然后让用户能够直…

禁止ipc$默认共享的方法

以下四种方法可以参考一下: A、一种办法是把ipc$和默认共享都删除了。但重起后还会有。这就需要改注册表。 1&#xff0c;先把已有的删除 net share ipc$ /del net share admin$ /del net share c$ /del …………&#xff08;有几个删几个&#xff09; 2&#xff0c;禁止建立空…

NODE属性说明

注&#xff1a;文本节点、元素节点或者注释节点等都是Node类型的子类&#xff0c;它们继承自Node类&#xff0c;所以这里的node可以是任何一种节点类型 1.node.nodeType用来以数字值返回指定节点node的节点类型 2.node.nodeName用来返回指定节点的节点名称 如果节点是元素节点…

使用临时文件mkstemp和输出errno对应的错误描述信息strerror

/* <<高级Linux编程.pdf>> page24-25: temp_file.cmkstemp: 从一个文件名模板(结尾是&#xff1a;XXXXXX)生成临时文件名&#xff0c;创建这个临时文件&#xff0c;将模式设置为仅当前用户可以访问&#xff0c;并且以读写权限打开这个文件。mkstemp函数用其他字符替…

微信h5网页关闭分享以及关闭当前页面

关闭网页分享一些按钮 document.addEventListener("WeixinJSBridgeReady", function () {WeixinJSBridge.call(hideOptionMenu); });关闭网页 WeixinJSBridge.call(closeWindow);

Linux Shell脚本中点号和source命令

Linux中一个文件是根据其是否具有执行属性来判断他是否可以直接运行的。就像Windows下的exe一样。如果我们要执行某一个文件&#xff0c;可以先将其权限修改为可执行(必须是所有者或者root才能修改)。然后&#xff0c;通过用sh来执行该脚本或者./脚本名。 但有时候我们并不想修…

[转载]使用命名管道实现进程间通信

使用命名管道实现进程间通信 来源 : VChelp 4.5 进程间通信 在Win32下提供的进程间通信方式有以下几种&#xff1a; 剪贴板Clipboard&#xff1a;在16位时代常使用的方式&#xff0c;CWnd类中提供了支持。 COM/DCOM&#xff1a;通过COM系统的代理存根方式进行进程间数据交换&…

HTML DOM之标签操作方法

1.document.getElementById(id)方法可返回对拥有指定 ID 的第一个对象的引用 2.document.getElementsByName(name)方法可返回带有指定名称的对象的集合 3.document.getElementsByTagName(tagname)方法可返回带有指定标签名的对象的集合。如果把特殊字符串 “*” 传递给 getEle…