商城网站流量,手机网站设计费用,做英文版网站,济南本地网站位运算详解之与或非|~的巧妙运用 一、位运算基础概念1.1 位运算的定义与本质1.2 与#xff08;#xff09;运算1.3 或#xff08;|#xff09;运算1.4 非#xff08;~#xff09;运算 二、与运算的巧妙运用2.1 提取二进制位2.2 判断奇偶性2.3 关闭某些位 三、或… 位运算详解之与或非|~的巧妙运用 一、位运算基础概念1.1 位运算的定义与本质1.2 与运算1.3 或|运算1.4 非~运算 二、与运算的巧妙运用2.1 提取二进制位2.2 判断奇偶性2.3 关闭某些位 三、或运算的巧妙运用3.1 设置二进制位3.2 合并二进制数3.3 初始化变量 四、非运算的巧妙运用4.1 生成反码4.2 切换状态4.3 按位取反实现特定逻辑 五、运用实例5.1 状态压缩5.2 数据加密与校验 与、或|、非~作为最基本的位运算操作通过巧妙组合与运用能解决许多复杂的算法问题、实现高效的数据处理甚至在底层系统设计中发挥关键作用。
一、位运算基础概念
1.1 位运算的定义与本质
位运算直接对二进制位进行操作计算机中的数据以二进制形式存储位运算就是对这些二进制位进行逻辑或算术操作。与、或、非是最基础的位运算它们基于二进制位的逻辑关系进行计算是理解和使用其他复杂位运算如异或、位移等的基础。
1.2 与运算
与运算的规则是当两个二进制位都为1时结果为1否则结果为0。可以用逻辑表达式表示为0 0 00 1 01 0 01 1 1。例如对于十进制数5二进制为0101和3二进制为0011它们进行与运算 01010011
------0001结果为1二进制0001。从逻辑意义上讲与运算可以用于提取二进制数中某些特定位置的位或者判断某些位是否同时为1。
1.3 或|运算
或运算的规则是只要两个二进制位中有一个为1结果就为1只有当两个二进制位都为0时结果才为0。逻辑表达式为0 | 0 00 | 1 11 | 0 11 | 1 1。例如50101和30011进行或运算 0101
| 0011
------0111结果为7二进制0111。或运算常用于将二进制数中某些位置的位设置为1或者合并多个二进制数的某些特征位。
1.4 非~运算
非运算也称为取反运算它将二进制位中的0变为11变为0。例如对于十进制数5二进制0101进行非运算
~ 0101
------1010在计算机中非运算的结果会根据数据类型的范围进行处理通常会涉及到补码等概念。非运算常用于生成与原二进制数相反的位模式或者在一些算法中用于改变位的状态。
二、与运算的巧妙运用
2.1 提取二进制位
在处理二进制数据时有时需要提取其中某些特定位置的位。例如有一个8位二进制数10101101想要提取其低4位可以将该数与00001111进行与运算 1010110100001111
----------00001101这样就成功提取出了低4位的数据。在实际编程中这种操作可用于处理网络协议中的数据包头字段、文件格式中的特定标志位等。
2.2 判断奇偶性
判断一个整数的奇偶性是与运算的一个简单而巧妙的应用。对于一个整数n如果n 1的结果为1则n为奇数如果结果为0则n为偶数。这是因为奇数的二进制表示的最低位为1偶数的二进制表示的最低位为0通过与1进行与运算可以快速判断最低位的值。例如
public class AndOperationExample {public static boolean isOdd(int n) {return (n 1) 1;}public static void main(String[] args) {System.out.println(isOdd(5)); // 输出 trueSystem.out.println(isOdd(6)); // 输出 false}
}2.3 关闭某些位
当需要将二进制数中某些特定位置的位设置为0时可以使用与运算。假设有一个二进制数11111111想要将其第3位和第5位关闭设置为0可以将该数与11010111进行与运算 1111111111010111
----------11010111这种操作在权限控制、状态标志位管理等场景中经常用到比如关闭某些用户权限对应的标志位。
三、或运算的巧妙运用
3.1 设置二进制位
与关闭位相反或运算可以用于将二进制数中某些特定位置的位设置为1。例如有一个二进制数00000000想要将其第2位和第4位设置为1可以将该数与00010100进行或运算 00000000
| 00010100
----------00010100在图形处理中设置像素点的某些颜色通道值就可以利用或运算实现。
3.2 合并二进制数
或运算能够将两个二进制数的特征位进行合并。假设有两个二进制数一个表示用户的基本权限00100100另一个表示用户的临时权限01001000将它们进行或运算可以得到用户的总权限 00100100
| 01001000
----------01101100这种方式在用户权限管理、状态标识合并等场景中非常实用。
3.3 初始化变量
在一些情况下需要将变量的某些位初始化为特定的值。使用或运算可以方便地实现这一操作。例如将一个整数变量的低8位初始化为1可以将该变量与0000000011111111进行或运算
public class OrOperationExample {public static void main(String[] args) {int num 0;num num | 0xff;System.out.println(Integer.toBinaryString(num)); // 输出 11111111}
}四、非运算的巧妙运用
4.1 生成反码
非运算最直接的应用就是生成一个数的反码。在计算机中补码运算常用于表示负数而反码是计算补码的中间步骤。例如对于正数5二进制00000101其反码为11111010。在一些加密算法、数据校验算法中会利用反码进行数据的变换和处理。
4.2 切换状态
非运算可以用于切换二进制位的状态即0变为11变为0。在状态机的实现中当需要切换某个状态标志位时可以使用非运算。比如有一个标志位flag用于表示某个功能是否开启通过flag ~flag可以实现功能的开启与关闭切换。
public class NotOperationExample {public static void main(String[] args) {boolean flag true;// 使用位运算模拟状态切换这里用int类型的最低位模拟int flagBit 1;flagBit ~flagBit;System.out.println((flagBit 1) 1); // 输出 false}
}4.3 按位取反实现特定逻辑
在一些算法中通过对某些二进制位进行取反操作可以实现特定的逻辑判断或数据处理。例如在判断一个数是否为2的幂次方时可以利用(n (n - 1)) 0这个特性其中n - 1可以通过对n进行一系列位运算得到非运算在其中起到了关键作用 。
五、运用实例
5.1 状态压缩
在一些需要处理多个状态的场景中可以使用位运算进行状态压缩。例如有8个开关每个开关有开和关两种状态使用一个字节8位二进制数就可以表示这8个开关的所有状态组合。通过与、或、非运算可以方便地设置、查询和修改每个开关的状态。
public class StateCompressionExample {public static void main(String[] args) {int state 0; // 初始状态所有开关关闭// 打开第3个和第5个开关state state | (1 2) | (1 4);// 判断第3个开关是否打开boolean isOn (state (1 2)) ! 0;System.out.println(isOn); // 输出 true// 关闭第5个开关state state ~(1 4);}
}5.2 数据加密与校验
在简单的数据加密和校验场景中位运算也能发挥作用。例如通过将数据与一个密钥进行异或运算异或运算可由与、或、非运算组合实现进行加密接收方再用相同的密钥进行异或运算解密。在数据校验中利用位运算生成校验码验证数据在传输过程中是否发生错误。 That’s all, thanks for reading! 觉得有用就点个赞、收进收藏夹吧关注我获取更多干货