2012-05-30 12 views
6

Sé que se eligió == para la igualdad y = para la asignación porque pensaban que la gente hacía más tareas que la comprobación de la igualdad --- pero seguramente no pensaban que habría más manipulación que la lógica booleana?por qué K & R hizo &&, || lógico y &, | a nivel de bit, no al revés?

¿Por qué no ir al revés, con & y | siendo operadores lógicos?

+7

¿"Sabes" que '==' y '=' fueron elegidos de esa manera? ¿Por qué? ¿Cuál es tu fuente para eso? ¿Esa fuente también habla de '&&' vs '&'? –

+0

Creo que tiene sentido tener '==', '&&', '||' todos relacionados con la lógica. Pero luego tenemos '<', '>' contra '<<', '>>'. – nhahtdh

+0

Sé que lo he leído en alguna parte, ¿tal vez el prefacio del libro de ANSI C? –

Respuesta

9

Desde el horse's mouth:

Los rápidos cambios continuaron después de que el lenguaje había sido nombrado, por ejemplo, la introducción de los && y || operadores. En BCPL y B, la evaluación de expresiones depende del contexto: dentro de si y de otros enunciados condicionales que comparan el valor de una expresión con cero, estos idiomas dan una interpretación especial a los operadores y ( &) y/o ( |). En contextos normales, operan a nivel de bit, pero en la instrucción B

    if (e1 & e2) ... 
el compilador debe evaluar e1 y si es distinto de cero, evalúe e2, y si también es distinto de cero, elabore la instrucción dependiente de if. El requisito desciende recursivamente en & y | operadores dentro de e1 y e2. La semántica de cortocircuito de los operadores booleanos en dicho contexto de 'valor de verdad' parecía deseable, pero la sobrecarga de los operadores era difícil de explicar y usar. A sugerencia de Alan Snyder, presenté los operadores && y || para hacer que el mecanismo sea más explícito.

Recuerde que C no se creó en el vacío; mucha de su rareza se puede remontar a BCPL y B.

+0

Yo aceptaría esto, pero @sarnold realmente obtuvo la respuesta primero. –

+0

@luxun, no dude en aceptar esto si considera que la descripción de Ritchie es lo suficientemente buena. John se tomó el tiempo para copiar y formatear la cita muy bien. :) – sarnold

Cuestiones relacionadas