簡體   English   中英

真值表輸入生成

[英]Truth table input generation

對於給定的n個輸入,我需要使用C ++生成所有可能的輸入組合

eg. n =4

I need to get,

1010101010101010

1100110011001100

1111000011110000

1111111100000000

(編輯:如果不清楚,這些是按列讀取的輸入組合)

我需要這些來執行&和|等操作。 因此,最好以整數表示形式將它們作為n個不同的變量來獲取。

我嘗試使用32個輸入組合的位集來完成此操作,但處理時間很長。 我希望你們是否對更好的實施有任何想法?

EDIT : Example when n=3

10101010

11001100

11110000

您的問題對我來說仍然是完全不可理解的。

但是,下面的代碼重現了示例輸出。

#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上尋求答案來欺騙自己和其他人(這將在以后咬住您和其他人)。 對於作業,請清楚地指出這是作業,然后我們可以相應地調整答案。

干杯,……

這是一個生成該輸出的簡短實現:

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");
    };
};

n = 4將是

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

不是您生成的內容(不確定“ n”的意思)????

您的問題沒有多大意義,但希望這與您要尋找的東西有所不同:

#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,total是可以在n(3)位中保留的可能性總數。 然后設置了一個char數組,如果它太短,則可以使用int。 添加所有可能。 這是因為真值表的可能性與許多位數中的可能性相同。

第二個printf顯示一個AND操作,在這里我們將做例如:

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

請參閱Alfs代碼以所需的方式進行格式化(尤其是這樣的二進制格式而不是十進制格式)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM