codice:
for (i = 0; i<len ; i++)
        {
            flag = 0;
            for(j = 0;j<len;j++)
                    flag |= (ar1[i] == ar2[j]);
            if(!flag)
                    elements[k++] = ar1[i];
        }
flag significa bandierina in inglese,in pratica è un indicatore (che ad ogni ciclo viene posto a zero) del fatto che almeno un elemento in ar2 sia uguale a quello correntemente in esame di ar1.

codice:
flag |= (ar1[i] == ar2[j]); sta per flag = flag | ((ar1[i] == ar2[j]);
,il simbolo | è un OR, il valore di flag alla fien del ciclo sarà ad uno solo e soltanto se almeno un elemento del secondo array è uguale a quello in esame del primo array,se flag resta a zero l'elemento corrente va inserito nell'insieme finale da restituire

Hai ancora molto da imparare magari ma se impari questo a memoria non sei sulla buona strada per progredire,devi cercare di capire ogni singola istruzione e soprattutto provare sempre per tuo conto dopo aver imparato dal codice degli altri