一、Java位运算基础概念

二进制底层逻辑

Java采用32位二进制补码存储整数,理解原码、反码、补码转换是掌握位运算的基础。如-5的补码表示为

Java位运算全面解析:7个提升编程效率的核心技巧

11111111 11111111 11111111 11111011

12。

运算类型概览

运算符 功能说明 示例(a=60,b=13)

&

按位与 60&13=12(00111100 & 00001101)

` ` 按位或

^

异或 60^13=49(相同为0,相异为1)

~

取反 ~60=-61(补码取反)

<<

左移 3<<2=12(0011→1100)

>>

带符号右移 -8>>1=-4(符号位填充)

>>>

无符号右移 -8>>>1=214748364413

二、4大高频应用场景

权限控制系统

// 使用位掩码管理权限

final int READ = 1<<0; // 0001

final int WRITE = 1<<1; // 0010

Java位运算全面解析:7个提升编程效率的核心技巧

int userPerm = READ | WRITE; // 0011

boolean canWrite = (userPerm & WRITE) != 0;

算法效率优化

快速判断奇偶:

(num & 1) == 0

交换变量值:

a ^= b; b ^= a; a ^= b;

计算绝对值:

(num ^ (num >> 31)) - (num >> 31)

11

数据压缩存储

使用1个int类型存储4个byte数据:

int packed = (b1<<24) | (b2<<16) | (b3<<8) | b4;

高性能计算

乘法替代:

a << n

等效于

a*2?

取模运算:

a & (b-1)

当b是2的幂时9

三、3个常见开发误区

Java位运算全面解析:7个提升编程效率的核心技巧

位移越界问题

// 错误示例:int类型左移32位实际移动0位

int x = 5 << 32; // 结果为5

符号处理陷阱

右移运算符

>>

会保留符号位,而

>>>

用0填充高位:

-8 >> 1 = -4 // 11111111 11111111 11111111 11111100

-8 >>> 1 = 2147483644 // 01111111 11111111 11111111 11111100

运算符优先级混淆

位运算优先级低于比较运算符,必须使用括号:

if((value & MASK) != 0) {...}

优化建议:

结合JOL工具查看对象内存布局

在循环体等高频执行代码块中使用位运算

对超过100万次的操作进行基准测试(JMH工具)

通过掌握这些核心技巧,开发者可提升20%-300%的代码执行效率。更多位运算在加密算法、图像处理等领域的深度应用案例,可参考《Java性能权威指南》1 。

《Java位运算全面解析:7个提升编程效率的核心技巧》.doc
将本文下载保存,方便收藏和打印
下载文档