无需登录 数据私有 本地保存

位运算在线计算器 - 与/或/非/异或及移位

30
0
0
0
位运算有哪些基本类型?

位运算共有七种基本类型:按位与(AND)——两个位都为 1 时结果为 1;按位或(OR)——至少一个位为 1 时结果为 1;按位异或(XOR)——两个位不同时结果为 1;按位非(NOT)——将所有位取反;逻辑左移——所有位向左移动,低位补 0;算术右移——所有位向右移动,高位补符号位;逻辑右移——所有位向右移动,高位补 0。前四种是逻辑位运算,逐位处理;后三种是移位运算,改变位的位置。其中 AND、OR、XOR 是二元运算(需要两个操作数),NOT 是一元运算(只需一个操作数),移位运算也是二元运算(操作数和移位位数)。

算术右移和逻辑右移有什么区别?

算术右移和逻辑右移的核心区别在于高位的填充方式。算术右移(>>)在高位填充原值的符号位(即保持正负号不变),适合处理有符号整数。例如,-8(二进制 11111111111111111111111111111000)算术右移 2 位得到 -2(二进制 11111111111111111111111111111110)。逻辑右移(>>>)在高位始终填充 0,适合处理无符号整数。例如,0xFFFFFFF8 逻辑右移 2 位得到 0x3FFFFFFE。在 x86/x64 处理器上,SAR 指令执行算术右移,SHR 指令执行逻辑右移。在 Java 中,>> 是算术右移,>>> 是逻辑右移。

位运算在实际开发中有哪些常见的应用场景?

位运算在实际开发中有多种应用场景。权限管理系统:使用位掩码表示权限集合,每个位代表一种权限,通过 AND/OR/NOT 运算高效地检查、授予和撤销权限。标志位操作:使用单个整数的不同位表示多个布尔状态,节省存储空间。快速乘除 2 的幂:左移 n 位等价于乘以 2^n,右移 n 位等价于除以 2^n,性能优于乘除法运算符。颜色处理:ARGB 颜色值的各个通道通过位移和掩码提取和组合。加密和校验:XOR 运算用于简单加密、CRC 校验、哈希函数等。网络编程:IP 地址的子网划分使用位掩码和 AND 运算。硬件寄存器操作:嵌入式开发中通过位运算读写硬件寄存器的特定位。

什么是位宽?位宽如何影响运算结果?

位宽是指参与位运算的二进制位数,决定了运算的数值范围和结果的展示方式。常见的位宽有 8 位(范围 0-255)、16 位(范围 0-65535)和 32 位(范围 0-4294967295)。位宽的影响主要体现在两个方面。第一,数值范围:超出位宽范围的输入会被截断或报错。第二,一元运算结果:NOT 运算的结果取决于位宽,~0 在 8 位下为 0xFF,在 32 位下为 0xFFFFFFFF。在本工具中,用户可以根据实际需求选择合适的位宽,工具会自动调整输入校验范围和结果显示格式。

XOR(异或)运算有什么独特的数学性质?

XOR 运算有几个独特的数学性质:自反性——任何数 XOR 自身等于 0(a ^ a = 0);恒等性——任何数 XOR 0 等于自身(a ^ 0 = a);交换律——a ^ b = b ^ a;结合律——(a ^ b) ^ c = a ^ (b ^ c);对合性——对同一个值 XOR 两次恢复原值((a ^ b) ^ b = a)。这些性质使得 XOR 在许多场景中非常有用:简单对称加密(明文 XOR 密钥 = 密文,密文 XOR 密钥 = 明文)、交换两个变量的值(无需临时变量)、数据校验和去重、奇偶校验位计算等。XOR 是位运算中最具数学美感的运算之一。

左移和右移运算如何快速计算 2 的幂?

左移和右移运算可以快速计算 2 的幂次方。左移 n 位等价于将无符号数乘以 2^n:1 << n = 2^n。例如,1 << 0 = 1,1 << 1 = 2,1 << 2 = 4,1 << 3 = 8,1 << 10 = 1024。右移 n 位等价于将无符号数除以 2^n(向零取整):x >> n = x / 2^n。例如,16 >> 2 = 4,32 >> 3 = 4,100 >> 1 = 50。这种用法在需要快速计算 2 的幂的场景中非常实用,如位掩码生成(1 << position)、内存对齐计算、哈希表大小计算等。由于移位运算在硬件层面直接操作二进制位,其执行效率通常高于乘除法运算。

如何使用位运算进行权限管理?

使用位运算进行权限管理的基本思路是:每个权限对应整数的一个位,1 表示拥有该权限,0 表示没有。假设 READ=1(0b001)、WRITE=2(0b010)、EXECUTE=4(0b100)。授予权限:权限标志 OR 当前权限(如 permissions | READ 将 READ 位设为 1)。检查权限:权限标志 AND 当前权限(如 (permissions & READ) != 0 表示拥有 READ 权限)。撤销权限:权限标志 AND NOT 当前权限(如 permissions & ~READ 将 READ 位清零)。切换权限:权限标志 XOR 当前权限(如 permissions ^ READ 切换 READ 权限的开/关状态)。这种方式用单个整数就能表示和操作多个权限,非常高效。