Anche SE ""false"" e' rappresentato con 0 e ""true"" e' rappresentato con qulcosa che e' DIVERSO da zero (1 e'un valore valido)
NON TRATTARE i valori booleani come interi.
E' CONCETTUALMENTE SBAGLIATO.
Non si dovrebbe MAI mescolare i ""domini"" dei valori (in questo caso ""interi"" e ""boolean""), a meno di non sapere ESATTAMENTE che e' quello che si vuol fare.
In questo caso ""NON E' il caso""
Ed infatti stai facendo una serie di pasticci CONCETTUALI:
stai mescolando operazioni tra boolean con operazioni tra bit.
vett[i]=false
va bene MA
int AND=vet[0];
stai convertendo un boolean in un intero: e' ESATTAMENTE quello che volevi fare?? Non penso, ma questo lo sai solo tu
AND &= vet[i];
stai mescolando operazioni tra bit (&=) con un valore booleano convertito in intero.
Ricorda che
a && b
viene valutato tra BOOLEAN e ritorna un boolean
a & b
viene valutato tra INTERI e ritorna un intero.
NON SONO la stessa cosa, anche se in PARTICOLARI condizioni ritornano valori compatibili (nel senso che considerando il risultato e' lo stesso considerando il valore come intero oppure boolean).