怎么改错啊一直改不对想死

发布时间:2019-07-29 17:05:00

很急  大作业 做了好几天啦 啊啊啊  跪求帮帮忙

#include "function.h" 

#include<stdlib.h>

double btod(bitset<16> b) //bitset to double

{

bool a=0;

if(b.test(15))

b.reset(15), a=1;

return a  -static_cast <double>(b.to_ulong())/10000;

static_cast<double>(b.to_ulong())/10000;

}

double function (bitset<16>bx)//适应度函数

{

return 5-2*btod(bx)*btod(bx);

}

void gamble (bitset<16>*bx)//轮盘赌

{

bitset<16>tbx[10];

int i;

double p[10],sum=0;

for(i=0;i!=10;++i)

sum+=function(bx[i]);

for(i=0;i!=10;++i)

p[i]=function(bx[i])/sum;

for(i=1;i!=10;++i)

p[i]+=p[i-1];

p[9]=1;

for(i=0;i!=10;++i)

{

sum/*临时用作随机数存储器*/=(double)(rand()%10001)/10000;

for(int j=0;j!=10;++j)

if(sum<=p[j])

{

tbx[i]=bx[j];

break;

}

}

for(i=0;i!=10;++i)

bx[i]=tbx[i];

}

void overlap(bitset<16>*bx) //交叉

{

//交叉率:100%

bitset<16> tmp0,tmp1,tmp2,tmp3;

for(int i=0;i!=10;i+=2)

{

tmp0=bx[i]&0xff00;(显示这行有错误)

tmp1=bx[i+1]&0xff00;

tmp2=bx[i]&0x00ff;

tmp3=bx[i+1]&0x00ff;

bx[i]=tmp0|tmp3;

bx[i+1]=tmp1|tmp2;

}

}

void variation(bitset<16> *bx)?//变异率

//变异率:0.01

for (int i=0;i!=10;++i)

{

int p=rand()%101;

if(p==1)

{

int j=rand()%16;

p=rand()%2;

bx[i][j]=p;

}

}

}


显示错误no match for 'operator&' (operand types are 'std::bitset<16ull>' and 'int')

推荐回答

你的bx与tmp0都是bitset类型,系统本身没有对bitset & 这个运算的(&只能对整形及其兼容的类型进行运算)

你要自己实现两个bitset的&功能的

以上问题属网友观点,不代表本站立场,仅供参考!