首页 > 编程语言 >Java按位操作工具类

Java按位操作工具类

时间:2022-08-30 18:12:07浏览次数:51  
标签:位操作 Java index int param source return 工具 BITS

/**
 * Bit转换工具
 */
@SuppressWarnings({"WeakerAccess", "unused"})
public class ConvertBit {
    /**
     * 短整型(int16)数据中包含的有效bit数量
     */
    public static final int BITS_IN_SHORT = 8 /*bits in one byte*/ * 2 /*bytes*/;
    /**
     * 整型(int32)数据中包含的有效bit数量
     */
    public static final int BITS_IN_INT = 8 /*bits in one byte*/ * 4 /*bytes*/;
    /**
     * 长整型(int64)数据中包含的有效bit数量
     */
    public static final int BITS_IN_LONG = 8 /*bits in one byte*/ * 8 /*bytes*/;

    /**
     * 从源数据中读取左数指定位置的一位bit值(0或1),不改变源数据
     * @param source 源数据
     * @param index 指定的索引,[0, BITS_IN_SHORT)
     * @return 指定索引处的bit值,true表示1,false表示0,如超出索引则始终返回false
     */
    public static boolean readBit(short source, int index) {
        if (index < 0 || index >= BITS_IN_SHORT) return false;
        return ((source >>> (BITS_IN_SHORT - 1 - index)) & 0x01) == 0x01;
    }

    /**
     * 更新源数据中的指定位置的一位bit值(0或1),返回更新后的数据,不改变源数据
     * @param source 源数据
     * @param index 指定的索引,[0, BITS_IN_INT)
     * @param bitValue 指定索引处的bit值,true表示1,false表示0
     * @return 更新后的数据,如索引超出则不改变数据
     */
    public static short writeBit(short source, int index, boolean bitValue) {
        if (index < 0 || index >= BITS_IN_SHORT) return source;
        int flag = 0x01 << (BITS_IN_SHORT - 1 - index);
        if (bitValue) return (short) ((source | flag) & 0xFFFF);
        else return (short) ((source & (~flag)) & 0xFFFF);
    }

    /**
     * 从源数据中读取左数指定位置的一位bit值(0或1),不改变源数据
     * @param source 源数据
     * @param index 指定的索引,[0, BITS_IN_INT)
     * @return 指定索引处的bit值,true表示1,false表示0,如超出索引则始终返回false
     */
    public static boolean readBit(int source, int index) {
        if (index < 0 || index >= BITS_IN_INT) return false;
        return ((source >>> (BITS_IN_INT - 1 - index)) & 0x01) == 0x01;
    }

    /**
     * 更新源数据中的指定位置的一位bit值(0或1),返回更新后的数据,不改变源数据
     * @param source 源数据
     * @param index 指定的索引,[0, BITS_IN_INT)
     * @param bitValue 指定索引处的bit值,true表示1,false表示0
     * @return 更新后的数据,如索引超出则不改变数据
     */
    public static int writeBit(int source, int index, boolean bitValue) {
        if (index < 0 || index >= BITS_IN_INT) return source;
        int flag = 0x01 << (BITS_IN_INT - 1 - index);
        if (bitValue) return source | flag;
        else return source & (~flag);
    }

    /**
     * 从源数据中读取左数指定位置的一位bit值(0或1),不改变源数据
     * @param source 源数据
     * @param index 指定的索引,[0, BITS_IN_LONG)
     * @return 指定索引处的bit值,true表示1,false表示0,如超出索引则始终返回false
     */
    public static boolean readBit(long source, int index) {
        if (index < 0 || index >= BITS_IN_LONG) return false;
        return ((source >>> (BITS_IN_LONG - 1 - index)) & 0x01) == 0x01;
    }

    /**
     * 更新源数据中的指定位置的一位bit值(0或1),返回更新后的数据,不改变源数据
     * @param source 源数据
     * @param index 指定的索引,[0, BITS_IN_LONG)
     * @param bitValue 指定索引处的bit值,true表示1,false表示0
     * @return 更新后的数据,如索引超出则不改变数据
     */
    public static long writeBit(long source, int index, boolean bitValue) {
        if (index < 0 || index >= BITS_IN_LONG) return source;
        long flag = ((long) 0x01) << (BITS_IN_LONG - 1 - index);
        if (bitValue) return source | flag;
        else return source & (~flag);
    }

}

标签:位操作,Java,index,int,param,source,return,工具,BITS
From: https://www.cnblogs.com/jinzlblog/p/16640358.html

相关文章

  • Java 接口测试利器 REST-assured 快速入门
    ⬇️点击“下方链接”,提升测试核心竞争力!>>更多技术文章分享和免费资料领取开源简约的接口测试DSL;支持XML、JSON的结构化解析;支持Xpath、JsonPath、gpath等多种......
  • CMake及交叉工具编译链的安装使用
    1.原理CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多。CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的mak......
  • ansible工具使用
    1.ansible工具介绍  自动化运维工具,基于python开发,功能主要有批量系统配置、批量程序部署、批量运行命令   官网:https://www.ansible.com/  官方文档:https://do......
  • OLW代码着色测试-java代码
    privatestaticvoidDoctor_checkStatus(CommodityMappercommodityMapper){ Shared.printTestClassEndInfo(); Map<String,Object>params=newHashMap<Strin......
  • System Toolkit系统维护工具
    SystemToolkit是Mac系统平台上的一款专业的系统维护工具,软件集成了很多优秀的功能,系统维护、、磁盘清理、电池维护、网络状态监控、网络流量监控等实用的功能,可以预览系......
  • 任务协同工具&共享思维导图软件
    ​1、Leangoo领歌Leangoo看板工具:Leangoo领歌是一款团队任务协同看板工具,以任务驱动的工作方式,让工作更简单。Leangoo领歌看板的主要功能有:1、任务管理:看板的管理方式......
  • webpack打包分析webpack-bundle-analyzer 打包文件分析工具
    最近需要减少项目打包后的文件(bundle)的大小,那么首先需要了解bundle的构成。目前我已知的方法有两种:利用webpack-bundle-analyzer插件利用webpack官方提供的分析功能......
  • linux安装java环境
    1.在线下载jdkwget--no-check-certificate--no-cookies--header"Cookie:oraclelicense=accept-securebackup-cookie"http://download.oracle.com/otn-pub/java/jdk/......
  • 关于 JavaScript 函数的思考
    函数可以将一堆重复的代码整合成一个整体,在需要改变的地方通过参数传值来改变。比如,根据类型查询数据,接口返回的数据一样,后续处理这个数据的逻辑也是一样的,只有类型和输入......
  • java-反射2
    1.javabean对象@MyAnnotation(value="hi")publicclassPersonextendsCreature<String>implementsComparable<String>,MyInterface{privateStringname;......