doble negación en C: ¿se garantiza que devolverá 0/1?

1 minuto de lectura

doble negacion en C ¿se garantiza que devolvera 01
amit

Es !!(x) garantizado por el estándar para devolver 0/1?

Tenga en cuenta que soy no preguntando sobre c ++, donde se define un tipo bool.

  • @DanFego: ha tenido un comportamiento bien definido desde que C se estandarizó por primera vez, por lo que el estándar no debería importar.

    – jamesdlin

    23 de diciembre de 2011 a las 17:32

  • posible duplicado de ¿Qué es !0 en C?

    – jamesdlin

    23 de diciembre de 2011 a las 17:33

  • C tiene un _Bool tipo y un bool macro en stdbool.h

    – Jens Gusted

    23 de diciembre de 2011 a las 21:32

1647685445 721 doble negacion en C ¿se garantiza que devolvera 01
Estera

Sí, en C99, ver §6.5.3.3/4:

El resultado del operador de negación lógica ! es 0 si el valor de su operando no es igual a 0, 1 si el valor de su operando se compara igual a 0. El resultado tiene tipo En t. La expresión !E es equivalente a (0==E).

Entonces !x y !!y sólo puede dar 0 o 1, como ints.

Para otros operadores, en C99, consulte también Es el resultado “verdadero” de >, <, !, &&, || o == definido?

  • Gracias. solo si tiene curiosidad por qué: lo estoy usando para la competencia uni, donde mi código se ejecutará sin optimizaciones de gcc, encontré usando !!x disminuyendo el tiempo de mi código en ~5% entonces x = ( x ? 1 : 0). De todos modos, gracias por la cita de la norma, fue muy útil.

    – amit

    25 de diciembre de 2011 a las 6:56

  • ¿Qué hay de los otros estándares C?

    – Sea amable con los nuevos usuarios

    4 sep 2019 a las 16:21

1647685445 877 doble negacion en C ¿se garantiza que devolvera 01
Tim

Este es un comentario realmente, pero es demasiado largo. (Por favor, no lo rechace solo por eso).

Encontré un documento muy extraño mientras buscaba el estándar para responder a su pregunta: El nuevo estándar C: un comentario económico y cultural. Y dicen que la academia está subfinanciada. (Aquí es el PDF completo de 2083 páginas y 10,5 MB. El enlace anterior es solo la sección sobre doble negación).

Tiene esto que decir sobre el tema de la doble negación:

Un doble negativo se interpreta muy a menudo como una declaración positiva en inglés (p. ej., “No es desconocido que ocurran dobles negativos en la fuente C”). La misma semántica que se aplica en C. Sin embargo, en algunos idiomas (p. ej., español) una doble negación se interpreta como que hace que la declaración sea más negativa (este uso ocurre en el habla informal en inglés, p. ej., “todavía no has visto nada” , pero es raro y mal visto socialmente1).

Creo que el autor estaría feliz sabiendo que esto no sirve para responder a su pregunta real (cuya respuesta es sí).

  • el criterio de votación es la utilidad, y esta respuesta, como usted dijo, ‘no sirve para nada’.

    –Pete Kirkham

    23 de diciembre de 2011 a las 14:38

  • @PeteKirkham, respetuosamente no estoy de acuerdo, al igual que las preguntas frecuentes: “Use sus votos negativos cada vez que encuentre una publicación notoriamente descuidada, sin esfuerzo, o una respuesta que sea clara y quizás peligrosamente incorrecta”. De todos modos, feliz navidad y próspero año nuevo.

    – Tim

    23 de diciembre de 2011 a las 15:16

  • @Tim Pero la flecha para votos a favor dice “Esta respuesta es útil”. Ahora, su publicación tiene la respuesta correcta a la pregunta al final, por lo que uno puede argumentar su utilidad. ¿Pero es lo suficientemente útil como para votar? No realmente, considerando solo la parte relacionada con la pregunta del OP. Pero para el esfuerzo de investigación y un gran hallazgo, extiendo un poco las reglas;)

    –Daniel Fischer

    23 de diciembre de 2011 a las 15:55

  • @DanielFischer bueno, gracias amablemente. Sin embargo, no estaba buscando votos a favor, realmente es un comentario, no una respuesta, simplemente no quería DV 🙂

    – Tim

    23 de diciembre de 2011 a las 16:10

  • Lo entendí, pero quería recompensarte por el hallazgo más divertido en semanas 😀

    –Daniel Fischer

    23 de diciembre de 2011 a las 16:17

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad