Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 布尔值数组,一个数字,一个倒数_Java_Boolean_Bitwise Operators_Bit Shift - Fatal编程技术网

Java 布尔值数组,一个数字,一个倒数

Java 布尔值数组,一个数字,一个倒数,java,boolean,bitwise-operators,bit-shift,Java,Boolean,Bitwise Operators,Bit Shift,我需要将一个布尔数组(30个或更多)转换成一个数字,以将其保存在db表的一个单元格中,我想使用java,但不使用DBs的本机函数。 所以,帮我把,比如,10变成[1,3]再回来。 (10=0^0+2^1+0^2+2^3您可以在int中编码多达32个布尔值,如下所示(该方法在32个布尔值上不会出错,但无法正确解压): 但是请注意,您没有对数组的长度进行编码-没有可靠的方法重建数组的长度,您需要提前知道它,或者将它存储在数据库中。如果以后将int解包为布尔值,则数组的长度将为32booleans。但

我需要将一个布尔数组(30个或更多)转换成一个数字,以将其保存在db表的一个单元格中,我想使用java,但不使用DBs的本机函数。 所以,帮我把,比如,10变成[1,3]再回来。
(10=0^0+2^1+0^2+2^3

您可以在
int
中编码多达
32个布尔值,如下所示(该方法
32个布尔值上不会出错,但无法正确解压):

但是请注意,您没有对数组的长度进行编码-没有可靠的方法重建数组的长度,您需要提前知道它,或者将它存储在数据库中。如果以后将int解包为布尔值,则数组的长度将为
32
booleans。但是,如果编码了
30
bools,则可以忽略前2个

或者如果您知道数组的长度

public static boolean[] unpack (int n, int length) {
    boolean[] res = new boolean[length];
    for(int i = length-1; n != 0x00 && i >= 0; i--) {
        if((n&0x01) != 0x00) {
            res[i] = true;
        }
        n >>>= 0x01;
    }
    return res;
}

请参阅此演示。

感谢您的回复,但这不是我想要的:我需要将许多布尔值(让它们为1和0)保留为一个十进制值啊,好吧。。。。那么走相反的路?那么,您是否有一个
布尔值的数组,或者您是否有一个整数数组,可以为您提供位的开/关位置?您的要求和示例相互矛盾。
public static boolean[] unpack (int n) {
    boolean[] res = new boolean[32];
    for(int i = 31; n != 0x00; i--) {
        if((n&0x01) != 0x00) {
            res[i] = true;
        }
        n >>>= 0x01;
    }
    return res;
}
public static boolean[] unpack (int n, int length) {
    boolean[] res = new boolean[length];
    for(int i = length-1; n != 0x00 && i >= 0; i--) {
        if((n&0x01) != 0x00) {
            res[i] = true;
        }
        n >>>= 0x01;
    }
    return res;
}