我在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/

10-11 22:58
查看更多