Por que os operadores lógicos em C não avaliam toda a expressão quando não é necessário?

Eu estava lendo meu livro para minha aula de arquitetura de computadores e me deparei com essa afirmação.

Uma segunda distinção importante entre a lógica dos operadores&&'e'||'versus seus equivalentes em nível de bit'&'e'|'é que os operadores lógicos não avaliam seu segundo argumento se o resultado da expressão puder ser determinado pela avaliação do primeiro argumento. Assim, por exemplo, a expressãoa && 5/a nunca causará uma divisão por zero, e a expressãop && *p++ nunca causará a desreferenciação de um ponteiro nulo. (Computer Systems: A Programmer's Perspective por Bryant e O'Hallaron, 3a edição, p. 57)

Minha pergunta é por que os operadores lógicos em C se comportam assim? Usando o exemplo do autor dea && 5/a, C não precisaria avaliar toda a expressão porque&& requer que ambos os predicados sejam verdadeiros? Sem perda de generalidade, minha mesma pergunta se aplica ao seu segundo exemplo.

questionAnswers(5)

yourAnswerToTheQuestion