Java中如何将整数转为boolean数组表示二进制?含固定长度需求
Java 整数转boolean数组的简便实现
针对你需求的两种场景,这里提供基于位运算的高效实现(比%运算更快,避免超时):
1. 无固定长度(仅保留有效二进制位)
输入整数的二进制有效位数决定数组长度,比如input=12(二进制1100)返回[true, true, false, false]。
public static boolean[] intToBooleanArray(int input) { // 处理0的特殊情况 if (input == 0) { return new boolean[]{false}; } // 计算二进制有效位数:32位int减去前导零的个数 int bitLength = Integer.SIZE - Integer.numberOfLeadingZeros(input); boolean[] result = new boolean[bitLength]; // 从最高位掩码开始遍历 int mask = 1 << (bitLength - 1); for (int i = 0; i < bitLength; i++) { // 当前位为1则设为true,否则false result[i] = (input & mask) != 0; // 掩码无符号右移一位,处理下一位 mask >>>= 1; } return result; }
2. 固定长度数组(不足补0)
指定数组长度,二进制位不足时高位补0,比如input=15(二进制1111)、固定长度6,返回[false, false, true, true, true, true]。
public static boolean[] intToFixedLengthBooleanArray(int input, int fixedLength) { if (fixedLength <= 0) { throw new IllegalArgumentException("固定长度必须大于0"); } boolean[] result = new boolean[fixedLength]; // 固定长度的最高位掩码 int mask = 1 << (fixedLength - 1); for (int i = 0; i < fixedLength; i++) { result[i] = (input & mask) != 0; mask >>>= 1; } return result; }
为什么用位运算?
位运算直接操作二进制底层数据,比%取模+除法的组合效率高得多——后者不仅需要计算,还得额外反转数组才能得到高位在前的顺序,很容易在数据量较大时超时。这里的实现直接按高位到低位的顺序填充数组,一步到位。
内容的提问来源于stack exchange,提问作者I_Hate_ReLU
相关产品推荐
相关产品推荐

