Integer.reverse 翻转 int 的 32 位二进制补码表示(含前导零),不考虑数值大小或符号,结果按有符号 int 解释;常用于 FFT 位反转、通信协议位序调整等底层场景。

Integer.reverse 是 Java 中用于翻转一个 int 类型整数**32 位二进制表示**的方法,它不改变数值的符号含义,而是将这 32 位(包括高位补零)从左到右完全倒序排列。
它翻转的是“32 位补码形式”的位顺序
Java 中 int 固定为 32 位。即使数值很小(比如 5),Integer.reverse(5) 也会先把它扩展成 32 位二进制(高位补零),再整体翻转:
-
5的 32 位二进制是:00000000 00000000 00000000 00000101 - 翻转后变成:
10100000 00000000 00000000 00000000(即高位变低位) - 这个结果作为有符号 int 解释,值为
-1476395008
不是按“有效位”或“绝对值”翻转
它不关心数值大小或是否为负,也不跳过前导零——始终处理完整的 32 位:
-
Integer.reverse(-1):-1 的 32 位补码全是 1(11111111...1111),翻转后还是全 1 → 结果仍是-1 -
Integer.reverse(0):32 个 0 翻转后仍是 32 个 0 → 结果为0 - 不会出现“只翻转 3 位”或“忽略符号位”这类行为
典型用途:位操作底层场景
这个方法常用于需要位序对称处理的场合,比如:
- 实现位反转哈希(bit-reversal permutation),在 FFT 算法中重排数组索引
- 某些硬件通信协议中要求字节/字的位序颠倒
- 生成位模式对称的测试数据
例如,要获取索引 i 在长度为 2^n 的数组中对应的位反转位置,可写:Integer.reverse(i) >>> (32 - n)(右移截断高位)
注意:返回值仍是 int,溢出不报错
翻转后的位模式直接解释为有符号 int。即使原数很小,翻转后也可能变成很大的负数(如前面的 5 → -1476395008),这是正常行为,不是错误。
如果业务上需要无符号语义,需自行用 long 扩展或用 Integer.toUnsignedString 等辅助处理。

















