位运算 用途

在代码中我们常会看到位运算
位运算是一种高效的运算机制,利用二进制来进行

数据类型
byte == 8
boolean == 8
short == 16
int == 32
long == 64
float == 32
double == 64
char == 16

4 用 二进制表示
0000 0000 0000 0000 .. 0000 0000 0000 0100
6 用 二进制表示
0000 0000 0000 0000 .. 0000 0000 0000 0110

或 | 符号 真真为真 真假为真 假假为假

 4 | 6:::6==110

0000 0000 0000 0000 .. 0000 0000 0000 0110


异或 ^ 真真为假 真假为真 假假为假

 4 ^ 6:::2==10

0000 0000 0000 0000 .. 0000 0000 0000 0010


与 运算 & 真真为真 真假为假 假假为假

 4 & 6:::4==100

0000 0000 0000 0000 .. 0000 0000 0000 0100


有符号的
右移符号 >> (若正数 高位补0, 负数, 高位补1)
右移一位
x =7 ==111 7>>1 = 011 = 3
右移两位
x =7 ==111 7>>2 = 001 = 1
左移一位
x =7 ==111 7<<1 = 1110 = 14
左移2位
x =7 ==111 7<<1 = 11100 = 28

无符号的右移 >>> 左移 <<< (无论正负 高位补0)

我们先看一下 int x = 7 ; 二进制 表示为


public class MainTest {

    public static void main(String[] args) {
        String str1 = "0101";
        int int1 = Integer.parseInt(str1, 2);
        System.out.println(Integer.toBinaryString(int1));

        int x = 7;
        getB2("x", x);
        int y = 2;
        getB2("y", y);
        // 或运算 
        int a1 = x ^ y ;
        getB2("x ^ y", a1);
        // 与运算
        int a2 = x & y;
        getB2("x & y", a2);
        // 求反
        int a3 = ~x;
        getB2("~x", a3);

        // 右移
        int a4 = x >> y;
        getB2("x >> y", a4);
        // 左移
        int a5 = x << y;
        getB2("x << y", a5);

    }

    private static void getB2(String string ,int x) {
        String binaryString = Integer.toBinaryString(x);
        System.out.println(string + ":::" + x + "==" + binaryString);
    }
}
### Python 中按位与运算的应用场景 #### 应用场景一:权限控制 在许多应用程序中,尤其是操作系统层面或涉及文件访问权限管理时,会使用按位与运算来检查特定标志是否被设置。通过这种方式可以在不影响其他标志的情况下单独测试某个条件。 例如,在Linux系统中的文件权限通常由三个八进制数字表示读(r)、写(w)、执行(x),每个位置上的0/1代表该种权限是否存在。如果要检测一个给定的权限掩码是否有写的权限,则可以用按位与操作来进行验证[^2]。 ```python write_permission = 0o200 # 对应于八进制的'w' file_permissions = 0o755 # 假设这是某文件的实际权限 if file_permissions & write_permission: print("有写入权限") else: print("没有写入权限") ``` #### 应用场景二:状态机的状态组合 当程序中有多个独立但又相互关联的状态需要跟踪时,可以采用按位与运算来简化逻辑判断过程。比如在一个游戏中可能同时存在玩家的生命值满格(Flag A), 防御力增强效果激活(Flag B)等多个不同属性,这些都可以用不同的比特位来标记并利用按位与进行快速查询。 ```python flag_a = 0b0001 # 生命值满格 flag_b = 0b0010 # 防御力增强 current_state = flag_a | flag_b # 当前状态下两个特性都开启 # 测试当前状态是否具有生命值满格这一特征 has_full_health = bool(current_state & flag_a) print(f"Has full health? {has_full_health}") ``` #### 应用场景三:图像处理领域内的像素颜色混合 对于RGB色彩模型来说,红(Red)、绿(Green)、蓝(Blue)三种原色各占8bit空间形成完整的24bit真彩色图片。有时为了达到特殊的视觉效果或是节省存储资源的目的,开发者们会选择只保留某些通道的信息而忽略掉其余部分;这时就可以借助按位与运算轻松完成此任务。 ```python red_mask = 0xFF0000 # 只留下红色分量 green_mask = 0x00FF00 # 只留下绿色分量 blue_mask = 0x0000FF # 只留下蓝色分量 color_value = 0xAABBCC # 给定的一个颜色值 only_red = color_value & red_mask only_green = color_value & green_mask only_blue = color_value & blue_mask print(hex(only_red)) # 输出仅含红色成分的颜色编码 print(hex(only_green)) # 输出仅含绿色成分的颜色编码 print(hex(only_blue)) # 输出仅含蓝色成分的颜色编码 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值