我在int[][][]
数组中工作,我需要从静态函数返回该数组一个字段的地址。
考虑到数组的尺寸会很小(int[32][32][32]
),我想到了返回一个包含所有三个值的数字,而不是使用包含三个数字的数组。
我已经有了一个可行的解决方案,在该解决方案中,我将我的电话号码打包成一个字符串,然后通过Integer.parseInt(String)
在接收方法中将其解压缩。
不幸的是,这在运行时方面并不太好,所以我想到了移位。
对于我的英语不好,我深表歉意,希望这个简单的问题值得您关注:)
最佳答案
如果您的数字在0 ... 255范围内,此示例会将三个数字编码为一个int,然后再次对其进行解码...
public class BitDemo {
public static void main(String[] args) {
int encoded = encode(20, 255, 10);
int[] decoded = decode(encoded);
System.out.println(Arrays.toString(decoded));
}
private static int[] decode(int encoded) {
return new int[] {
encoded & 0xFF,
(encoded >> 8) & 0xFF,
(encoded >> 16) & 0xFF
};
}
private static int encode(int b1, int b2, int b3) {
return (b1 & 0xFF) | ((b2 & 0xFF) << 8) | ((b3 & 0xFF) << 16);
}
}
(b1 & 0xFF)
-获取b1的前8位((b2 & 0xFF) << 8)
-获取b2的前8位并将其左移8位((b3 & 0xFF) << 16)
-获取b3的前8位并将其左移16位这三个数字或运算在一起。
如果您有负数或大于255的数字,则会得到不同的结果。
关于java - 如何在一个整数中保存多个小整数以进行移位?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37305266/