真值表输入生成

时间:2010-11-19 01:09:13

标签: c++ binary combinations binary-data

对于给定的n个输入,我需要使用C ++生成所有可能的输入组合

eg. n =4

I need to get,

1010101010101010

1100110011001100

1111000011110000

1111111100000000

(编辑:如果不清楚,这些是按列读取的输入组合)

我需要这些来执行像&amp ;;这样的操作。和|所以如果我把它们作为n个不同的变量用它们的整数表示最好的话。

我尝试使用bitset进行32个输入组合但是需要很长时间才能处理。我希望你们有更好的实施方法吗?

EDIT : Example when n=3

10101010

11001100

11110000

4 个答案:

答案 0 :(得分:4)

你的问题对我来说仍然完全不可理解。

但是,下面的代码会重现您的示例输出。

#include <iostream>

int main()
{
    using namespace std;

    int const   n       = 3;
    int const   nBits   = 1 << n;

    int powerOf2  = 1;
    for( int i = 0;  i < n;  ++i )
    {
        for( int bitNum = 0;  bitNum < nBits;  ++bitNum )
        {
            cout << 1 - bitNum/powerOf2 % 2;
        }
        cout << endl;
        powerOf2 *= 2;
    }
}

现在我希望这不是功课。如果是那时你就是通过在SO上寻找答案来欺骗自己和他人(这将会咬你,其他人,后来)。对于家庭作业,请清楚地表明它是作业,然后我们可以相应地调整我们的答案。

干杯&amp;第h。,

答案 1 :(得分:2)

这是一个生成该输出的简短实现:

void print_mask(int n){
    for (int level = 0; level < n; level++){
        for (int i = (1<<n)-1; i>=0; i--)   // we'll always output 2**n bits
            printf("%d", (i >> level) & 1);
        printf("\n");
    };
};

答案 2 :(得分:1)

n = 4将是

0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

不是你生成的(不确定你的意思是“n”)???

答案 3 :(得分:0)

你的问题并没有多大意义,但希望这有点像你想要的那样:

#include <stdio.h>

main(){

        int n = 3;
        int total = (n*n)-1;
        char poss[total];
        int i = 0;
        for (i = 0; i < total; ++i){
                poss[i] = i;
                printf("%d \t",poss[i]);
                printf("%d \n",poss[i] & 1);
        }

}

所以n就是你所说的n,总数是n(3)位可以保存的总数。然后设置一个char数组,如果它太短,你可以使用int。所有可能的都添加了。这是因为真值表的可能性与那些位中的可能性相同。

第二个printf显示AND操作,这里我们将进行例如:

000 AND 001 => 000
001 AND 001 => 001
010 AND 001 => 000
011 AND 001 => 001

以您想要的方式查看Alfs代码的格式(特别是二进制而不是像这样的十进制)