位运算符

位运算符#

在Java中,|= 是一个位运算符,称为按位或赋值运算符。它的作用是将左侧变量与右侧表达式进行按位或(OR)操作,并将结果赋值给左侧变量。

对于 config |= system; 这行代码,它的意思是:

  1. config 是一个整数变量,用来存储当前的配置状态。
  2. system 是一个整数,代表要使能的系统,它的二进制表示中只有一个位是1(例如,GPS 对应的值是 0x0001,二进制表示为 0000 0000 0000 0001)。
  3. |= 运算符将 configsystem 进行按位或操作,并将结果赋值给 config

按位或操作的规则是:

  • 如果两个相应的位都是1,则结果为1。
  • 如果两个相应的位中至少有一个是1,则结果为1。
  • 只有两个相应的位都是0,结果才为0。

所以,当你对 config 执行 config |= system; 时,system 中为1的位会将 config 中相应的位设置为1,而不影响 config 中的其他位。这样,config 中对应于 system 的位就被“使能”了。

例如,如果 config 最初是 0x0000(所有位都是0),并且你执行 config |= GPS;,其中 GPS0x0001,那么 config 将变为 0x0001(只有GPS对应的位是1)。如果你接着执行 config |= BDS;,其中 BDS0x0002,那么 config 将变为 0x0003(GPS和BDS对应的位都是1)。这个过程可以继续,以使能更多的系统。

package com.example.demo.导航欺骗;

public class GNSSConfig {
    // 定义常量,每个常量代表一个位
    public static final short GPS = 0x0001; // Bit0: GPS
    public static final short BDS = 0x0002; // Bit1: BDS
    public static final short GLONASS = 0x0004; // Bit2: GLONASS
    public static final short GALILEO = 0x0008; // Bit3: GALILEO

    // 默认构造函数
    private GNSSConfig() {
        // 私有构造函数,防止实例化
    }

    // 设置系统使能状态的方法
    public static short setEnabledSystems(short... systems) {
        short config = 0; // 默认全部禁止
        for (int system : systems) {
            config |= system; // 使能指定的系统
        }
        return config;
    }

    // 获取系统使能状态的方法
    public static boolean isSystemEnabled(int config, int system) {
        return (config & system) != 0; // 检查指定的系统是否被使能
    }

    // 主方法,用于测试
    public static void main(String[] args) {
        // 默认全部使能
        int defaultConfig = 0xFFFF;

        // 使能GPS和BDS
        int customConfig = setEnabledSystems(GPS, BDS);

        // 检查GPS是否被使能
        boolean isGPSEnabled = isSystemEnabled(customConfig, GPS);
        System.out.println("Is GPS enabled? " + isGPSEnabled);

        // 检查GALILEO是否被使能
        boolean isGALILEOEnabled = isSystemEnabled(customConfig, GALILEO);
        System.out.println("Is GALILEO enabled? " + isGALILEOEnabled);
    }
}

作者:Esofar

出处:https://www.cnblogs.com/firsthelloworld/p/18586173

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   我不想学编丿程  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示