[英]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.