当前位置: 首页 > 面试题库 >

将所有大小为n的二进制字符串生成为布尔数组的最快方法?

吴开宇
2023-03-14
问题内容

例如,如果我想要所有长度为3的二进制字符串,则可以像这样简单地声明它们:

boolean[] str1 = {0,0,0};
boolean[] str2 = {0,0,1};
boolean[] str3 = {0,1,0};
boolean[] str4 = {0,1,1};
boolean[] str5 = {1,0,0};
boolean[] str6 = {1,0,1};
boolean[] str7 = {1,1,0};
boolean[] str8 = {1,1,1};

将所有长度为N的可能二进制字符串生成为 布尔数组 的最有效方法是什么?

我不一定需要 最有效的方法,只有一个那是相当有效的,并容易让我多线程。

编辑:我应该注意,如果重要的话,我会将它们全部存储在ArrayList中。


问题答案:

这是生成真值表的一些代码…(由于数组大小限制,仅适用于32位(您可以将size变量更改为任意值,并根据需要将布尔值存储为1/0):

int size = 3;
    int numRows = (int)Math.pow(2, size);
    boolean[][] bools = new boolean[numRows][size];
    for(int i = 0;i<bools.length;i++)
    {
        for(int j = 0; j < bools[i].length; j++)
        {
            int val = bools.length * j + i;
            int ret = (1 & (val >>> j));
            bools[i][j] = ret != 0;
            System.out.print(bools[i][j] + "\t");
        }
        System.out.println();
    }


 类似资料:
  • 我天真的尝试是这样的: 但这比我想要的慢多了。我的分析显示是减速的地方,但我不确定我能让它变得简单多少。 我觉得如果没有Swift/Objc的开销,这将是非常快的。在C语言中,我认为这是一个简单的循环,其中一个字节的内存与一个常量相比较,但我不确定应该查看的函数或语法是什么。 我也试过 而且快了15%左右。我希望不止这些。

  • 问题内容: 假设我有字符串: 我得到的位置无关紧要,但是为了具体起见,假设我从二进制文件中读取了它。 我知道我的字符串是4(4字节)浮点数的二进制表示形式。我想将那些浮点数作为一个numpy数组。我 可以 做: 但是创建中间元组似乎很愚蠢。有没有一种方法可以在不创建中间元组的情况下执行此操作? 编辑 我还希望能够以可以指定字符串的字节序的方式构造数组。 问题答案: 或者,如果您想要大端字节序: 的

  • 我如何将一个写为二进制的字符串转换为二进制(字节数组)? 如果我有一个字符串: 下面是当我将二进制设置为字节数组时发生的情况(字节数组返回48,这是ASCII) 我不擅长解释,所以希望上面的例子足以告诉你我想要什么。

  • 问题内容: 我有一个二进制字符串,如下所示: 我希望我的INT的值是代替 实现此目标的最佳方法是什么? 问题答案: 使用Where 是您的方案无法表示的最小正数。(在这种情况下为8,因为为7且为负。) 大于,所以你减去的,给。

  • 问题内容: 我有一个很大的二进制字符串“ 101101110 …”,并且正在尝试将其存储到字节数组中。最好的方法是什么? 可以说我有largeString =“ 0100111010111011011011000000001000110101” 我正在寻找的结果: [78,187,96,17,21] 01001110 10111011 01100000 00010001 10101 我试过的 但是

  • 问题内容: 我正在使用存储在配置文件中的文件掩码来更改文件的权限。由于os.chmod()需要八进制数,因此我需要将字符串转换为八进制数。例如: 在明显地尝试创建从0000到0777的每个八进制数并将其放入以字符串版本作为排队的字典中之后,我想到了以下内容: 有没有更简单的方法可以做到这一点? 问题答案: 您是否刚刚尝试将基数8指定为: 例: