我试图限制表b[4][4]
,以便只有那些i>=j
且满足条件(stored[i] & stored[j]) == stored[i]
为1,其余为0的地方。 / p>
为什么这不起作用?
void main(){
unsigned int i = 0 , j = 0;
_Bool b[4][4];
bitvector stored[4] = {111,001,010,000};
for(i=0;i<4;i++){
for(j=0;j<4;j++){
__CPROVER_assume( !(b[i][j]) || ((i>=j) && (stored[i] & stored[j] == stored[i])));
}
}
CProver假设尝试获得b[i][j] == 1
应该暗示stored[i]& stored[j] == stored[i]
的效果。
但输出并没有产生这种效果。问题是什么?我是CBMC和C的新手。
答案 0 :(得分:2)
请注意bitvector stored[4] = {111,001,010,000};
中的值位于基数10。
你的意思是基础2 {0b111,0b001,0b010,0b000}
?