¡He estado usando! (negación lógica) en C y en otros idiomas, tengo curiosidad ¿alguien sabe cómo hacer los suyos propios? ¿función? o tienes una forma creativa de hacer uno?¿Cómo funciona la negación lógica en C?
Respuesta
int my_negate(int x)
{
return x == 0 ? 1 : 0;
}
eso es mejor :) –
No puedo creer que me las haya arreglado para hacerlo :-p –
Me pasa todo el tiempo. Escribiré algo, pero realmente significa exactamente lo contrario. –
!e
pueden ser reemplazados por ((e)?0:1)
Si desea sobrecargar un operador, el prototipo adecuado es:
bool operator!();
No soy un gran fan de la sobrecarga de operadores, pero algunos A las personas les gusta su azúcar sintáctico. EDITAR: ¡Esto es solo C++! Ponlo en la definición de tu clase.
Los operadores de sobrecarga funcionan bien con plantillas. Solo asegúrate de que 'operator!()' Tenga la misma semántica que '!'. –
Si lo pones en la definición de la clase, no toma argumentos y funciona en * this. bool operator!() const; El prototipo que muestre podría usarse para una definición de operador amigo. –
Derecha. Buen caso de uso para sobrecargar a un operador. Sin embargo, si no tenía una buena razón para eso, el operador no suele ser tan intuitivo como una función bien nombrada. Sin embargo, siempre hay excepciones. – thebretness
Recuerde el operador bang '!' o signo de admiración en inglés, está integrado en el lenguaje de programación como un medio para negar.
Considere este ejemplo operador ternario:
(some condition) ? true : false;
Ahora, si eso fue negada, el operador ternario sería este
(some condition) ? false : true;
El área común donde eso puede conseguir algunos programadores en un poco de un ajuste es la función strcmp
, que devuelve 0 para las cadenas que son iguales, y 1 para dos cadenas no iguales:
if (strcmp(foo, "foo")){ }
cuando en realidad debería ser:
if (!strcmp(foo, "foo")){ }
En general, cuando cambia el signo, es todo lo contrario, como se muestra en el ejemplo de operador ternario ...
Espero que esto ayude.
'strcmp' devuelve 0 para cadenas del mismo modo; devuelve un número negativo (no necesariamente -1) si la primera cadena precede al segundo, y un número positivo (no necesariamente +1) si la primera cadena sigue al segundo, donde el orden se basa en los valores de byte del (sin signo) caracteres que componen las cuerdas. –
@Jonathan: Correcto, -1 se considera verdadero ... ya que es el máximo sin signo int ... es decir. 0xFFFF ... es decir. distinto de cero, independientemente de cuándo -ive o + 'ive – t0mm13b
Su respuesta dice' la función strcmp, que devuelve 0 para las cadenas que son iguales, y 1 para dos cadenas que no son iguales '. Esto es incorrecto; devuelve un valor distinto de cero para dos cadenas que no son iguales, no 'incondicionalmente 1 si las cadenas son diferentes'. –
C considera que todos los valores distintos de cero son "verdaderos" y cero "falsos". La negación lógica se hace comprobando contra cero. Si la entrada es exactamente cero, da salida a un valor distinto de cero; de lo contrario, salida cero. En el código, puede escribir esto como (input == 0) ? 1 : 0
(o puede convertirlo en una declaración if
).
Cuando pregunta cómo "hacer su propio método", ¿quiere decir que quiere escribir una función que niega un valor lógico o quiere definir lo que hace el operador de exclamación? Si el primero, entonces la declaración que publiqué arriba debería ser suficiente. Si esto último, entonces me temo que esto es algo que no se puede hacer en C. C++ apoya la sobrecarga del operador, y si hacer esto es una necesidad estricta, entonces sugeriría que busquen allí.
- 1. Operador de negación lógica en F #? (! -equivalente)
- 2. negación lógica con sólo operadores de bits (excepto!)
- 3. ¿Cómo funciona la asignación lógica de JavaScript?
- 4. ¿No es posible la negación de -2147483648 en C/C++?
- 5. ¿Cómo representar la negación en BNF?
- 6. Negación en Python
- 7. Coincidir con la negación
- 8. ¿Cómo se expresa la negación booleana en Scheme?
- 9. ¿Por qué std :: basic_ios sobrecarga el operador de negación lógica unario?
- 10. En Django QuerySet, ¿cómo hago la negación en el filtro?
- 11. C La negación a nivel de bit crea salida negativa:
- 12. Negación unaria y binaria
- 13. Negación en cmd y powershell
- 14. doble negación en C: ¿se garantiza que devolverá 0/1?
- 15. Separación de la IU y la lógica en C#
- 16. ¿Cómo funciona la función scanf en C?
- 17. ¿Cómo analizo la lógica booleana?
- 18. NO (~) vs NEGACIÓN (!)
- 19. java.lang.SecurityException: Permiso Negación:
- 20. C# ¿Alguien puede explicar esta lógica booleana
- 21. Biblioteca HTTP C/C++, que maneja solo la lógica?
- 22. ¿Cómo funciona * restrict/* __ restrict__ funciona en C/C++?
- 23. Uso de la negación en la directiva LocationMatch
- 24. ¿Cómo diseño lógica de vista en proyectos de C#
- 25. ¿Cómo funciona feof() en C
- 26. strpos en C- ¿Cómo funciona?
- 27. ¿Cómo funciona sbrk() en C++?
- 28. ¿Cómo funciona extern en C++?
- 29. ¿Cómo funciona #error en C/C++?
- 30. ¿Cómo funciona una variable en C/C++?
Cuando habla de un "método", parece que puede estar hablando de C++. Puede escribir una función que haga una negación lógica en C, ¡pero no puede anularla! operador. C++ le permite escribir un operador! - ya sea un método o una función no miembro, pero eso es C++, no C. – Steve314
No fue tan fácil como me pareció encontrar una pregunta y respuesta con la parte del estándar que dice que '!' devuelve 1 si la entrada es 0 (a diferencia de cualquier otro valor distinto de cero de una manera dependiente del compilador), pero es [C99 estándar 6.5.3.3] (http://stackoverflow.com/questions/7945950/is-logical-negation-of- zero-0-compiler-dependent-in-c). Solo para tu información. – HostileFork