分享实用小工具:JAVA版本位运算工具类
将二进制数中的每位数字1或0代表着某种开关标记,1为是,0为否,则一个数字可以代表N位的开关标记值,可有效减少过多的变量定义 或 过多的表字段,同时也能在一些复杂的组合判断场景下利用位与、位或、异或等位运算实现简单高效的逻辑判断
如下是JAVA版位运算工具类,没啥技术含量,主要是运用:位移、位与、位或、异或 运算,如果对位运算操作不清楚的可以阅读我之前的文章:简简单单学会C#位运算 - 梦在旅途 - 博客园 (cnblogs.com) --虽是C#,其实原理都一样,与语言无关。
/**
 * @author zuowenjun
 * @description 位运算工具
 * 用途:将二进制数中的每位数字1或0代表着某种开关标记,1为是,0为否,则一个数字可以代表N位的开关标记值,可有效减少过多的变量定义 或 过多的表字段
 */
public class BitUtils {
    /**
     * 获取二进制数字中指定位数的结果,如:1011,指定第2位,则结果是0,第3位,则结果是1
     *
     * @param num 二进制数(可以十进制数传入,也可使用0b开头的二进制数表示形式)
     * @param bit 位数(第几位,从右往左,从0开始)
     * @return
     */
    public static int getBitFlag(long num, int bit) {
        return (int) num >> bit & 1;
    }
    /**
     * 更新二进制数字中指定位的值
     *
     * @param num       二进制数(可以十进制数传入,也可使用0b开头的二进制数表示形式)
     * @param bit       位数(第几位,从右往左,从0开始)
     * @param flagValue 位标记值(true=1,false=0)
     * @return
     */
    public static long updateBitValue(long num, int bit, boolean flagValue) {
        if (flagValue) {
            //将某位由0改为1
            return num | (1 << bit);
        } else {
            //将某位由1改为0
            return num ^ (getBitFlag(num, bit) << bit);
        }
    }
    /**
     * 将数字转换为二制值形式字符串
     *
     * @param num
     * @return
     */
    public static String toBinaryString(long num) {
        return Long.toBinaryString(num);
    }
}
MYSQL 的SQL语句也可以使用位运算进行查询或更新字段的操作哦,用法可自行查网络相关资料。
分享实用小工具:JAVA版本位运算工具类的更多相关文章
- Java的位运算  待整理
		
位运算:二进制运算 Java的异或运算^ 真^假=真 假^真=真 假^假=假 真^真= 假,这四个是在网上copy的例子,真是1,假是0 但它却是说明了Java异或运算的基本法则,那就是:只要两个条件 ...
 - java中位运算
		
1byte(字节)=8bit(比特) 1 0 0 0 0 0 0 0 1 2进制的1的原码 反码 补码 0 0 0 0 0 0 0 0 2进制的0的原码 反码 补码 -1 1 0 0 0 0 ...
 - 11076: 小P的集合 位运算
		
考虑当只有一个数出现奇数次的时候,我们可以很轻松的知道,把所有的数异或和即可,因为异或运算有一个非常有意思的性质,a^b^a=b 考虑当有两个数(a,b)出现奇数次的时候,我们异或和得到,num=a^ ...
 - Java的位运算
		
左移位操作 左移位运算的符号为[<<],左移位运算符左面的操作元称作被移位数,右面的操作数称作移位量. 左移位运算是双目运算符,操作元必须是整型类型的数据,其移动过程是:[a <&l ...
 - java中位运算和移位运算详解
		
一.位运算 (1)按 位 与 & 如果两个相应的二进制形式的对应的位数都为1,则结果为1,记为同1为1,否则为0.首先我们看一下对正数的运算 分别看一下正数和负数的具体运算步骤 ...
 - 《Thinking in Java》位运算
		
按位操作符: 首先先记住一件事,方便理解:是否对应正负对应10. 1.与(&):11得1,10得0,00得0. 2.或(|):11得1,10得1,00得0. 3.异或(^):11得0,10得1 ...
 - java中位运算^,&,<<,>>,<<<,>>>总结
		
1.^(亦或运算) ,针对二进制,相同的为0,不同的为1 public static void main(String[] args) { System.out.println("2^3运算 ...
 - JAVA有关位运算的全套梳理
		
一.在计算机中数据是如何进行计算的? 1.1:java中的byte型数据取值范围 我们最开始学习java的时候知道,byte类型的数据占了8个bit位,每个位上或0或1,左边第一位表示符号位,符号位如 ...
 - 随机点名小程序--- -JAVA版本
		
话不多少,直接上代码 一个能够直接运行的随机点名的小程序,一个界面化的小程序.望广大网友多多支持! 1.创建一个随机点名的类 public class ProcessRandomName { JFra ...
 - hihoCoder 1513 : 小Hi的烦恼 位运算好题
		
思路:考虑第i个同学,第一门课排名比他靠前的同学的集合是S1,第二门课是S2...第五门课是S5,很明显比这个同学每门课程都优秀的同学就是S1&S2&S3&S4&S5, ...
 
随机推荐
- 揭秘 vivo 如何打造千万级 DAU 活动中台 - 启航篇
			
本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/Ka1pjJKuFwuVL8B-t7CwuA作者:悟空中台研发团队 vivo大厦(南京) 一 ...
 - S3C2440移植linux3.4.2内核之支持YAFFS文件系统
			
上一节S3C2440移植linux3.4.2内核之修改分区以及制作根文件系统我们构建了根文件系统,这节我们修改内核支持yaffs2文件系统 目录 获取yaffs2源码并给内核打补丁 编译内核make ...
 - S3C2440移植uboot之启动过程概述
			
上节烧写了uboot到开发板,不能运行.这节我们分析uboot重新编译uboot,由最后一条链接命令开始分析uboot 目录 1.分析start.S 2._start会跳转到start_code处 ...
 - C#绘制柱形图
			
柱形图数据 通过 panel 绘制柱形图 private void ShowPic() { Conn(); //打开数据库连接 using (cmd = new SqlCommand("SE ...
 - # Linux操作补充
			
取消高亮显示空格和Tab gvim ~/.vimrc # 在.vimrc文件中 set nohls # shell中执行 source ~/.vimrc ./vimrc是Gvim的配置文件 Gvim新 ...
 - android应用申请加入电池优化白名单
			
首先,在 AndroidManifest.xml 文件中配置一下权限: 1 <uses-permission android:name="android.permission.REQU ...
 - [转帖]Prometheus Shell Exporter
			
Shell Exporter can execute Powershell or Bash scripts and transform its output to Prometheus metrics ...
 - [转帖]kingbase(人大金仓)的一些常用表操作语句
			
包括 1)创建表 2)删除表 3)加字段 4)字段换名 5)字段改类型 6)字段添加注释 7)修改字段为自增类型 8)增加主键 9)查看模式下的表 一.创建和删除表 DROP TABLE IF EXI ...
 - [转帖]全球CPU市场格局(2022)
			
https://www.eet-china.com/mp/a222817.html 本文选自"2022年国产服务器CPU研究框架",重点分析2022年CPU产业链.CPU市场规模. ...
 - [转帖]LVS入门篇(三)之LVS的工作模式和调度算法
			
LVS入门篇(三)之LVS的工作模式和调度算法 https://www.cnblogs.com/linuxk/p/9358512.html 1.NAT模型 (1)原理图: ①.客户端(200.10.1 ...