java中int类型占4字节,提取各字节需位移加掩码:第0字节用intval & 0xff;第1字节用(intval >> 8) & 0xff;第2字节用(intval >> 16) & 0xff;第3字节用(intval >> 24) & 0xff。

Java中int类型占4个字节(32位),内存布局为高位在前、低位在后(大端序逻辑,但实际存储依赖平台;不过Java虚拟机规范规定int为有符号大端表示,在位运算中我们按**从高到低的字节顺序编号为 byte3、byte2、byte1、byte0**,其中byte0是最低有效字节(LSB))。要精确提取每个字节,核心是用位移 + 掩码(& 0xFF)。
提取第0字节(最低字节,偏移0)
这是最末8位,直接与0xFF按位与即可,无需移位:
-
表达式:
intVal & 0xFF - 说明:0xFF = 0b11111111,能屏蔽高24位,只保留低8位
- 结果是int类型,但值范围是0~255(无符号语义),Java中需注意它仍是正数,即使原int该字节为负(如0xFF实际代表-1,但&0xFF后变成255)
提取第1字节(次低字节,偏移1)
需右移8位,再掩码:
-
表达式:
(intVal >> 8) & 0xFF - 说明:先右移8位,把目标字节移到最低位置,再用0xFF截取
- 注意使用无符号右移
>>>不是必须的,因为移位后仍用&0xFF,符号位影响已被清除;但若intVal为负,>>会带符号扩展,不过&0xFF后结果一致
提取第2字节(次高字节,偏移2)
右移16位:
-
表达式:
(intVal >> 16) & 0xFF - 例如:
intVal = 0x12345678→ 移位后得0x00001234→ &0xFF =0x34(即52)
提取第3字节(最高字节,偏移3)
右移24位:
-
表达式:
(intVal >> 24) & 0xFF - 结果就是最高8位的无符号值(0~255)
- 若想保留符号意义(即作为有符号字节),可强转
(byte)(intVal >> 24),但此时-128~127,且高位会被截断
不复杂,但容易忽略掩码和移位方向。关键点:每次移位后都用& 0xFF确保只取8位,避免符号扩展残留影响。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











