¿Por qué los operadores lógicos en C no evalúan la expresión completa cuando no es necesario?

Estaba leyendo mi libro de texto para mi clase de arquitectura de computadoras y me encontré con esta declaración.

Una segunda distinción importante entre los operadores lógicos&&'y'||'frente a sus contrapartes de nivel de bits'&'y'|'es que los operadores lógicos no evalúan su segundo argumento si el resultado de la expresión puede determinarse evaluando el primer argumento. Así, por ejemplo, la expresióna && 5/a nunca causará una división por cero, y la expresiónp && *p++ nunca provocará la desreferenciación de un puntero nulo. (Computer Systems: A Programmer's Perspective por Bryant y O'Hallaron, 3ra edición, p. 57)

Mi pregunta es ¿por qué los operadores lógicos en C se comportan así? Usando el ejemplo del autor dea && 5/a, no necesitaría C evaluar la expresión completa porque&& requiere que ambos predicados sean verdaderos? Sin pérdida de generalidad, mi misma pregunta se aplica a su segundo ejemplo.

Respuestas a la pregunta(5)

Su respuesta a la pregunta