求布尔函数的C语言实现

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
for(k=0,j=0;j<5;j++)//取满足条件的k
if(bit[j])
k=k+(bit[j]<<j);
if(coeff & (1<<k))
coeff=coeff&(~(1<<k));
else
coeff=coeff|(1<<k);
}
}
}
}
void main()
{
clock_t start, finish;
Coeff的bitk位加上1;
End
End
End
End
End
源代码:
0
0
0
0
0
1
1
0
0
0
0
0
0
1
0
0
0
0
1
1
0
0
0
1
0
0
1
0
0
0
1
0
1
0
0
1ห้องสมุดไป่ตู้
0
1
1
0
0
0
1
1
1
0
0
1
0
0
0
1
0
1
1
0
0
1
0
0
0
1
0
1
0
0
1
1
0
1
0
0
0
0
1
1
0
0
1
0
1
1
0
1
0
1
1
1
0
0
1
1
1
1
0
0
0
0
0
0
1
1
1
0
0
0
1
0
0
1
0
0
1
0
1
1
第一步:初始化coeff=0;
第二步:for i从0到32
若x0,x1,x2,x3,x4分别取i的bit0,bit1…bit4位,输出为1时执行以下循环
Fork0从bit0到1
For k1从bit1到1
For k2从bit2到1;
For k3从bit3到1;
For k4从bit4到1;
令k的bit0,bit1…bit4位分别取k0,k1…k4
void coefficient_generate(long array_1)
{
int i,bit[5],k,j;
coeff=0;//初始化系数全为0;
for(i=0;i<32;i++)
{
if ( array_1 & (1<<i) )
{
for(bit[0]=((i&1)>0);bit[0]<2;bit[0]++)
由真值表确定布尔函数表达式:
想法很朴素,先由真值表得到其最小项形式,然后展开多项式,合并同类项(在有限域F(2)上运算)最终结果就是布尔函数的多项式表示形式。
算法具体实现过程是:
设有关变量为x0,x1,x2,x3,x4
用无符号long型的coeff的各位表示多项式的系数,例如coeff的bit 0位表示常数项1的系数,bit 1位表示x1的系数,……bit 31位表示x0x1x2x3x4的系数;
printf("%x",coeff);
}
因此F(x)的表达式为1+x6+x10++x12+x10*x12+x21*x23+x6*x10*x21 +x6*x10*x12*x21*x23
上述例子来源于我们的组合论实验,数据就没更改。
for(bit[1]=((i&2)>0);bit[1]<2;bit[1]++)
for(bit[2]=((i&4)>0);bit[2]<2;bit[2]++)
for(bit[3]=((i&8)>0);bit[3]<2;bit[3]++)
for(bit[4]=((i&16)>0);bit[4]<2;bit[4]++)
0
0
1
1
0
0
1
0
1
0
1
0
1
0
1
1
0
1
1
0
1
0
1
1
1
0
1
1
0
0
0
1
1
0
1
0
0
1
1
1
0
1
0
1
1
1
1
1
0
1
1
1
0
0
1
1
1
1
1
0
1
1
1
0
0
1
1
1
1
1
1
1
1
1
1
0
#include <stdio.h>
#include <time.h>
unsigned long coeff;
unsigned long array_1=0x66696996;//这是真值表,输出为1,就在相应为1真值表如上
double duration;
start = clock();
coefficient_generate(array_1);
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "运行时间为:%f秒。\n", duration );
相关文档
最新文档