Salve a tutti.
Sono qua per chiedere chiarimenti sulle condizioni di verità con i tipi booleani.
L'esercizio sul quale mi sono inbattuto è il seguente:

"Siano dati due file numeri1.txt e numeri2.txt contenenti entrambi un elenco di numeri interi. Si scriva una funzione int conta (A) che riceve in ingresso un vettore A a valori interi di dimensione N. La funzione restituisce il numero degli elementi di A il cui valore compare sia in numeri1.txt che in numeri2.txt."

La risoluzione è la seguente;

Codice PHP:
#include <fstream.h>
const int N=10;
int controlla (int A[N]){
fstream fg;
boolean b1=false;
boolean b2=false;
int n=0;
for(
int i=0i<Ni++){
f.open(“numeri1.txt”ios::in);
g.open(“numeri2.txt”ios::in);

while(
f>>n1) { if(n1==A[i]) { b1=true;
                                       break; }
while(
g>>n2) { if(n2==A[i]) { b2=true;
                                       break; }
if(
b1 && b2n++;
b1=false,
b2=false;
f.close();
g.close();
}
return 
n;

Non capisco perchè i tipi booleani b1 e b1 debbano essere inizializzati a false nella dichiarazione, e perchè vengono resettati a false alla fine dell'iterazione del for.

La cosa che però mi sbubbia di più è la condizione:

Codice PHP:
if(b1 && b2n++; 
Che significa? L'operatore AND restituisce TRUE se entrambi gli operandi sono TRUE, e restituisce FALSE altrimenti. Io al posto del mio professore avrei scritto:

Codice PHP:
if(b1 && b2 =true || b1 && b2 =falsen++; 
è la stessa cosa o complico solamente la condizione?

Grazie in anticipo, spero di essere stato il più chiaro possibile!