Podwójne operatory (&& oraz ||) są to operatory logiczne (i oraz lub). Operatorem logicznym jest negacji jest !.
Pojedyncze (& oraz |) są operatorami bitowymi. Operatorem bitowym negacji jest ~.
Operatory logiczne traktują wszystko, co jest równe zero za fałsz, wszystko różne od zera jako prawdę (niektórzy mylnie uważają, że wszystko co dodatnie, a tak nie jest!) i zwracają 0 lub 1
Operator bitowy traktuje każdy bit z danych osobno, na każdym odpowiadającym bicie wykonuje dokładnie to samo, co logiczny na całej zmiennej, czyli dla a=0 i b=1 wynik operacji a | b i a || b będzie równy. Jednak dla a=0b0 i b = 0b11 otzymamy a | b = 0b11, a || b = 0b1. Dla a=0b10 i b = 0b1 otrzymamy a | b = 0b11 i a || b = 0b1
Na forum już to kilka razy było tłumaczone, jakbyś dobrze poszukał to być wiedział