Java & 运算

今天在阅读JAVA源码的时候遇到很多位运算其中包括了 & 位与

& 是位与运算 是二进制运算一种

例子:

3&4 = 0 

0011

&

0100

=0000

那么&和&&有什么关系么?一个是位与 ,一个是逻辑与,在逻辑判断上&于&&是等价的 ,但是他们是二回事,逻辑运算和位运算.

true&true = true

false&true = false

true&false = false

false&false = false


### Java 中整数的按位与(`&`)运算Java 中,按位与运算符 `&` 对两个操作数的每一位执行布尔逻辑乘操作。如果对应位都为 1,则结果为 1;否则为 0。 #### 按位与运算的工作原理 对于任意两个整数 A 和 B 的按位与运算: - 将 A 和 B 转换成二进制表示形式。 - 针对每一对对应的比特位进行比较: - 如果两者都是 1,则该位置的结果是 1; - 否则,结果是 0。 例如,考虑十进制数值 5 (即二进制 0101) 和 3 (即二进制 0011),它们之间的按位与运算是这样的[^3]: ```plaintext 0101 // 十进制 5 & 0011 // 十进制 3 ------ 0001 // 结果为十进制 1 ``` #### 实际应用案例 下面是一个简单的例子展示如何使用按位与运算来检测某个特定标志是否被设置。假设有一个类用于管理电源开关状态,其中每个开关可以用不同的位来代表: ```java public class Power { private int switchValue; public void setSwitchValue(int value){ this.switchValue = value; } public boolean isSwitchOpen(int flag){ return (this.switchValue & flag) != 0; // 利用按位与判断指定flag是否存在 } } ``` 在这个例子中,通过 `(switchValue & flag)` 可以检查给定的标记 (`flag`) 是否存在于当前的状态(`switchValue`)里。当且仅当相应的位都被置位时,这个条件才会成立并返回 true[^4]。 #### 测试代码片段 为了更好地理解这一点,这里提供了一个完整的测试程序,它展示了如何打开和关闭一个具体的开关,并打印其二进制字符串表示以及验证开关状态的变化情况: ```java public static void main(String[] args) { Power item = new Power(); item.setSwitchValue(0); final int SWITCH_FOUR = 8; // 假设SWITCH_FOUR定义为第四个开关,也就是2^3=8 System.out.println("Initial binary string: " + getBinaryString(item.getSwitchValue())); System.out.println("Is Switch Four open? : " + item.isSwitchOpen(SWITCH_FOUR)); item.openSwitch(SWITCH_FOUR); System.out.println("\nAfter opening Switch Four:"); System.out.println("Current binary string:" + getBinaryString(item.getSwitchValue())); System.out.println("Is Switch Four now open?: " + item.isSwitchOpen(SWITCH_FOUR)); } private static String getBinaryString(int num){ return Integer.toBinaryString(num); } ``` 此段代码演示了如何利用按位与运算来进行基本的权限控制或者配置项的选择等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值