(p -> q) <-> [( r ^ t ) v (not) s]
这个等式是我的老师给我们编写真值表的。我已经由老师对此进行了检查,但我在尝试填充数组时遇到了问题:
bool p[32] = { false };
bool q[32] = { false };
bool r[32] = { false };
bool s[32] = { false };
bool t[32] = { false };
我知道我正在尝试通过以下方式分配未预留的内存(获取“变量'p'周围的堆栈已损坏”):
for (int i = 0; i < counter; i++)
{
toTrue[i] = true;
for (int j = (counter * 2); j < (counter * 3); j++)
{
toTrue[j] = true;
for (int k = (counter * 4); k < (counter * 5); k++)
{
toTrue[k] = true;
for (int l = (counter * 6); l < (counter * 7); l++)
{
toTrue[l] = true;
for (int m = (counter * 8); m < (counter * 9); m++)
{
toTrue[m];
}
}
}
}
}
这只是基于基本的真值表,其中会产生一个基本的 2 变量或真值表:
a b c
1 1 1
1 0 1
0 1 1
0 0 0
我不确定如何在不使用 vector 的情况下解决这个问题,我对 vector 的了解非常有限,所以不能 100% 有信心走这条路。我的另一个想法是尝试创建多种方法来填充 p,然后是 q,然后是 r,等等。但是我的老师之前已经告诉我,我扩展代码的次数超出了我的需要,我想做多种方法,比如那会导致他说同样的话。有什么建议吗?
最佳答案
一种不同且简单的方法。
#include<iostream>
using namespace std;
bool getBit(unsigned int uint, int position) { // !!! no range check !!!
return (uint >> position) & 0x1;
}
int main( int argc, char* argv[]) {
bool p,q,r,s,t;
cout << "p q r s t (p -> q) <-> [( r ^ t ) v (not) s] \n";
for ( unsigned int i = 0 ; i < 32 ; i++ ) {
cout << getBit(i,0) << " ";
cout << getBit(i,1) << " ";
cout << getBit(i,2) << " ";
cout << getBit(i,3) << " ";
cout << getBit(i,4) << " ";
cout << ((!p || q) == (( r ^ t ) || !s));
cout << endl;
}
return 0;
}
关于c++ - bool 真值表 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52505340/