分享实用小工具: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语句也可以使用位运算进行查询或更新字段的操作哦,用法可自行查网络相关资料。

Original: https://www.cnblogs.com/zuowj/p/16400087.html
Author: 梦在旅途
Title: 分享实用小工具:JAVA版本位运算工具类

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/539177/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • java- 接口笔记

    接口 interface 接口就是一组规范(就像我们法律一样),所有实现类都要遵守。 面向对象的精髓,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(…

    Java 2023年6月15日
    0104
  • axios&spring前后端分离传参规范总结

    前后端分离开发的场景下,开发人员的工作内容更加专注与专业,但是也产生了一些额外的沟通成本。比如:本文中为大家说明的前后端参数传递与接受方法。本文主要是面对前端使用axios,后端使…

    Java 2023年6月15日
    0108
  • Maven 依赖调解源码解析(五):同一个文件内声明,后者覆盖前者

    这次我们让 A 直接依赖 X,且在 A 的 pom.xml 中声明两次 X,分别为 1.0 和 2.0 版本。内容如下: 这个场景比较简单,不涉及调解器,我们直接对着图看一下主流程…

    Java 2023年6月16日
    047
  • sqlcmd执行含中文等字符的sql脚本时报错解决方案

    阅文时长 | 0.41分钟字数统计 | 668.8字符主要内容 | 1、问题说明 2、解决方案 3、常用的Code Page 4、声明与参考资料『sqlcmd执行含中文等字符的sq…

    Java 2023年6月5日
    069
  • JS跨域通信方法及SF相关问题

    iframe的跨域通信比较推荐的是采用信使的方式。基本地原理是在iframe的内部再创建一个iframe(称之为信使),父子页面轮询信使的window.name,父子页面各自使用变…

    Java 2023年6月7日
    059
  • 第三届“传智杯”全国大学生IT技能大赛(初赛A组)题解

    留念 C – 志愿者 排序。。按照题目规则说的排就可以。wa了两发我太菜了qwq #include using namespace std; const int MAX…

    Java 2023年5月30日
    0105
  • Java中的异常

    Java异常的体系结构 根类Throwable,其子类Error和Excepion Excepion分为运行时异常RuntimeException(也叫非检查型异常),和编译时Ex…

    Java 2023年6月15日
    072
  • 【RocketMQ】msgId与offsetMsgId

    一. 概念 1. msgId(uniqId) 由 producer客户端 生成,调用方法MessageClientIDSetter.createUniqID()生成全局唯一的Id …

    Java 2023年5月29日
    093
  • arthas监控elasticsearch(7.x)

    arthas介绍 arthas是Alibaba推出的java诊断工具 官方文档 准备 准备docker环境 name port centos_arthas 3658:3658 do…

    Java 2023年6月8日
    087
  • Ingress Nginx v0.30 Hostnetwork高性能模式安装

    Ingress Nginx v0.30 Hostnetwork模式安装 `apiVersion: v1kind: Namespacemetadata: name: ingress-…

    Java 2023年5月30日
    0100
  • VMware虚拟机系统无法使用桥接联网

    1、环境 VMware 14.1.1 虚拟系统:Windows Server 2008 32位 2、解决办法 打开虚拟网络编辑器 有红框中的提示出现时,就点击更改设置 点击桥接模式…

    Java 2023年6月5日
    082
  • 通过代码获取res里生成R.java中的值

    引用:http://my.eoe.cn/blue_rain/archive/552.html 有的时候我们生成库文件,需要在里面加入一些UI,并提供出一些xml的资源,那如何在其他…

    Java 2023年5月29日
    095
  • Java学习-081-多线程14:线程状态示例

    Java 线程的 6 种状态: 初始(NEW):新创建了一个线程对象,但还没有调用 start() 方法。 运行(RUNNABLE):调用线程的 start() 方法,线程进入可运…

    Java 2023年5月29日
    094
  • Redis篇:持久化、淘汰策略,缓存失效策略

    关注公众号,一起交流,微信搜一搜: 潜行前行 redis 持久化 redis 的数据是保存再系统内存里面的。持久化就是把内存的数据转移到磁盘中,redis 的持久化策略有两种:RD…

    Java 2023年6月5日
    091
  • Django登陆以后重定向到请求登陆的页面

    登陆和注销操作在网页编程上很常见,这两个操作经常需要在操作成功以后转入发出请求的页面。 比如用户正在浏览一篇文章,发现下载该文章的附件需要登录才能进行,这时候点击登陆链接转入登陆页…

    Java 2023年5月29日
    065
  • 设计模式—桥接模式

    类型:结构型 目的:通过抽离出多个维度相互组合(聚合)来代替继承,简化系统。 话不多说,看个优化案例。 优化案例 现有系统中,对于画面窗口的边框有一套样式来控制是否有圆角。因为新的…

    Java 2023年6月7日
    055
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球