If you use a single & (And) the second part of the expression is evaluated. This could be bad if the second part relies on the first part being true. Usually always use && as the second part is not evaluated if the first part is false.
Logically the single & does a bitwise operation as others have said, which is still valid for boolean comparison/evaluation. Really the only time a single & (or |) should be used (or boolean evaluation) is if the second evaluation should always run (if it is a function call/modifier). This is bad practice through and probably why the book does not mention it.
Single & are useful with flag enums and bit masks.
The following will throw an exception of obj is null:
bool b = obj != null & obj.IsActive
But this will work:
bool b = obj != null && obj.IsActive
This is bad:
bool b = obj.IsActive && obj.SetActive(false);
bool b = obj.IsActive & obj.SetActive(false);
The & operator is here to stay.